数据库中的字符集和排序规则

时间:2013-06-05 09:14:23

标签: mysql sql

我是数据库的初学者,所以请耐心等待。我正在尝试设置数据库并从文件tables.sql导入一些表。 tables.sql中的一些列中包含瑞典字母(Ä,Ö),问题是我得到以下内容:

  

Ä=ä
  Ö=ö

首先我开始检查服务器的字符集:

  

的MySQL>显示'character_set_server';

等变量

服务器配置为字符集'Latin-1'。我必须提到,除了创建数据库之外,我无法控制服务器。所以我想我必须创建我的数据库并指定数据库的字符集。

这就是我的工作方式:

  

的MySQL>创建数据库db;

     

的MySQL> alter database db character set utf8 collat​​e utf8_swedish_ci;

我通过执行:

仔细检查了我的tables.sql是否有charset utf-8
  

file -bi allsok_tables.sql

然后我通过以下方式将其加载到数据库中:

  

$ mysql -u [username] -h [hostname] -P [port] -p db< tables.sql

当我在tables.sql中创建表时,我使用engine = InnoDB(不知道这是否相关)。但是,如果我现在从TableTest表中选择所有内容

  

的MySQL>从TableTest中选择*

我得到这些奇怪的字符而不是瑞典字符。我现在感谢任何帮助。

提前致谢!

更新:

如果我手动将值插入表中,则可以使用,例如

  

的MySQL>插入TableTest值('åäö');

所以问题似乎与.sql文件有关。正确?

1 个答案:

答案 0 :(得分:1)

$ mysql ... --default-character-set=utf8 < tables.sql
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

MySQL需要知道您要发送的数据的编码方式。为此,您需要设置连接编码。从客户端连接到MySQL时,通常会运行SET NAMES查询或在您选择的API上使用等效调用来执行此操作。在命令行上,--default-character-set选项执行此操作。它需要设置为您的文件所在的编码。