Mysql

掙扎於 MySQL 字元集,排序規則

  • February 14, 2022

我在從我的應用程序中插入西班牙語字元時遇到問題。

當我在數據庫上插入字元時,字元插入正確,但是當我嘗試從應用程序傳遞相同的數據時,儲存在表中的數據不正確。

例如,當我直接在數據庫伺服器上插入時:

CREATE TABLE  prod_inns(`prod_name` varchar(100) COLLATE latin1_bin DEFAULT NULL)

insert into prod_inns values(Otoño);

我看到這個:

select * from prod_inns ;

+-------------+
| prod_name   |
+-------------+
| Otoño       |
+-------------+

delete  FROM  prod_inns ;

但是,當我從申請表中插入相同的值時,我看到的是:

select * from prod_inns ;

+-------------+
| prod_name   |
+-------------+
| Otoño      |
+-------------+

這是我的 MySQL 設置:

MySQL>  show global variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

MySQL>  show global variables like 'coll%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

我的設置有什麼問題?我應該怎麼做才能正確儲存數據和讀取數據?

注意:我使用的是 mysql-5.7.19

不要使用 latin1,使用 utf8。您有“Mojibake”,因為客戶端中的字節是 utf8 編碼的,但您說它們是 latin1。

更多關於 Mojibake 以及如何處理它: https ://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored

您需要按照此處的說明更改數據庫字元集和排序規則:

IE

ALTER  DATABASE database_name
CHARACTER SET character_set_name
COLLATE collation_name

在你的情況下,它應該是

ALTER DATABASE my_database
CHARACTER SET utf8
COLLATE spanish_unicode_ci

(或者如果你想要傳統的西班牙語2 - 按照這裡

引用自:https://dba.stackexchange.com/questions/188581