我只是尝试创建一个新表并向其中导入一些值,但我有一个编码问题,我似乎无法解决。
以下是有关我的环境的character_set
和collation
信息:
mysql> show variables like 'char%';
+--------------------------+-------------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------------+
| character_set_client | cp850 |
| character_set_connection | cp850 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | cp850 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | c:\wamp64\bin\mysql\mysql8.0.31\share\charsets\ |
+--------------------------+-------------------------------------------------+
8 rows in set, 1 warning (0.00 sec)
mysql> show variables like 'coll%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | cp850_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | utf8mb4_0900_ai_ci |
+----------------------+--------------------+
3 rows in set, 1 warning (0.00 sec)
字符串
我也有一个test.sql
,它包含:
SET default_storage_engine=INNODB;
DROP TABLE IF EXISTS `chapitres`;
CREATE TABLE chapitres (
id TINYINT UNSIGNED AUTO_INCREMENT NOT NULL,
titre VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
)
DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;
INSERT INTO chapitres
(id, titre)
VALUES
('1', 'é');
型
如果我导入test.sql
文件如下:
mysql> source test.sql
Query OK, 1 row affected (0.00 sec)
型
我没有得到想要的结果:
mysql> select * from chapitres;
+----+-------+
| id | titre |
+----+-------+
| 1 | Ú |
+----+-------+
1 row in set (0.00 sec)
型
我期待一个é
,我得到了一个Ú
。你能帮助我了解我错过了什么吗?非常感谢你的帮助!
1条答案
按热度按时间tmb3ates1#
进一步浏览后,我注意到
é
在cp 850中被编码为0082
。这对应于ISO 8859-1
和UTF-8
中的00E9
,Ù
是cp850
中的00E9
。我通过将
test.sql
编码为cp850
或简单地将其内容复制/粘贴为DBeaver中的SQL语句来解决我的问题。我不知道为什么
character_set_client
和character_set_connection
被设置为cp850
,这可能是Windows的默认设置,但我还没有准备好冒险进入那个兔子洞。