Mysql
掙扎於 MySQL 字元集,排序規則
我在從我的應用程序中插入西班牙語字元時遇到問題。
當我在數據庫上插入字元時,字元插入正確,但是當我嘗試從應用程序傳遞相同的數據時,儲存在表中的數據不正確。
例如,當我直接在數據庫伺服器上插入時:
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 - 按照這裡)