Tôi đang lưu trữ các chuỗi Unicode trong cơ sở dữ liệu MySQL bằng một ứng dụng web Django. Tôi có thể lưu trữ dữ liệu Unicode tốt, nhưng khi truy vấn, tôi thấy rằng é
và e
được đối xử như thể họ là những nhân vật giống nhau:Tại sao MySQL xử lý é giống như e?
In [1]: User.objects.filter(last_name='Jildén')
Out[1]: [<User: Anders Jildén>]
In [2]: User.objects.filter(last_name='Jilden')
Out[2]: [<User: Anders Jildén>]
Đây cũng là trường hợp khi sử dụng MySQL shell trực tiếp:
mysql> select last_name from auth_user where last_name = 'Jildén';
+-----------+
| last_name |
+-----------+
| Jildén |
+-----------+
1 row in set (0.00 sec)
mysql> select last_name from auth_user where last_name = 'Jilden';
+-----------+
| last_name |
+-----------+
| Jildén |
+-----------+
1 row in set (0.01 sec)
Dưới đây là các thiết lập cơ sở dữ liệu charset:
mysql> SHOW variables LIKE '%character_set%';
+--------------------------+------------------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/Cellar/mysql/5.1.54/share/mysql/charsets/ |
+--------------------------+------------------------------------------------------+
đây là sơ đồ bảng:
CREATE TABLE `auth_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) CHARACTER SET utf8 NOT NULL,
`first_name` varchar(30) CHARACTER SET utf8 NOT NULL,
`last_name` varchar(30) CHARACTER SET utf8 NOT NULL,
`email` varchar(200) CHARACTER SET utf8 NOT NULL,
`password` varchar(128) CHARACTER SET utf8 NOT NULL,
`is_staff` tinyint(1) NOT NULL,
`is_active` tinyint(1) NOT NULL,
`is_superuser` tinyint(1) NOT NULL,
`last_login` datetime NOT NULL,
`date_joined` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=7952 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
và đây là những tùy chọn Tôi đang đi qua qua DATABASES
thiết lập của Django:
DATABASES = {
'default': {
# ...
'OPTIONS': {
'charset': 'utf8',
'init_command': 'SET storage_engine=INNODB;',
},
},
}
Lưu ý rằng tôi đã cố gắng thiết lập collation bảng để utf8_bin
, không có hiệu lực:
mysql> alter table auth_user collate utf8_bin;
mysql> select last_name from auth_user where last_name = 'Jilden';
+-----------+
| last_name |
+-----------+
| Jildén |
+-----------+
1 row in set (0.00 sec)
Làm thế nào tôi có thể nhận được MySQL để điều trị những nhân vật khác nhau?
Vui lòng đăng đầu ra của 'SHOW CREATE TABLE tablename', trong đó' tablename' là tên của bảng chứa cột có liên quan . – Hammerite
Tôi đã chỉnh sửa câu hỏi để đưa vào lược đồ bảng. Cảm ơn. – claymation