使用UTF8进行MySQL命令行格式化

时间:2011-07-22 09:06:01

标签: mysql utf-8

我有一个包含瑞典语/挪威语字符串的数据库表。

当我查询一些数据时,我得到如下输出:

set names latin1;

输出
+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interi#####                   | 
| Bwg Homes                         | 
| If Skadef####kring                | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

现在如果我set names utf8;为了看到具有正确编码的字符,那么MySQL命令行的表格输出的格式就会中断。

set names utf8;

输出
+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interiør                     | 
| Bwg Homes                         | 
| If Skadeförsäkring              | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

问题:

这不是一个大问题,但它使输出更难读。有人知道如何保持表格格式不变吗?

2 个答案:

答案 0 :(得分:105)

简短回答

使用选项--default-character-set=utf8

启动客户端
mysql --default-character-set=utf8

您可以在/etc/mysql/my.cnf文件中将其设置为默认值。

[mysql]
default-character-set=utf8

简短的回答不起作用,请阅读下面的内容

上述命令强制character_set_clientcharacter_set_connectioncharacter_set_results配置变量为utf8

为了检查所有与charset相关的配置变量的值,您可以运行:

show variables like '%char%';

character_set_database为您提供当前数据库(模式)的字符集。默认情况下,使用character_set_server中指定的字符集创建模式和表,除非指定了明确地在CREATE陈述中。

可以在character_set_server文件中更改my.cnf

[mysqld]
character-set-server = utf8

此外,表和列可以拥有自己的字符集,这些字符集可能与其父表或模式不同。要专门检查数据库中每个表和列的值,请参阅以下答案: How do I see what character set a MySQL database / table / column is?

如果您想更改现有表格和列的字符集,请参阅以下答案:How to convert an entire MySQL database characterset and collation to UTF-8?

有关mysql docsumentation

中连接字符集的更多信息

一切都设置为utf8,但我仍然看到奇怪的字符

即使所有字符集变量,表和列都设置为utf8,也可能会出现屏幕上看到奇怪字符的情况。例如,某人可能通过具有utf8连接的客户端(例如通过运行latin1)在mysql --default-character-set=utf8列中编写了Unicode字符。在这种情况下,您需要使用与写入值相同的字符集连接到数据库。您还可以通过正确的编码来检索和重写它们。

注意:正如评论所指出的,myslq utf8编码不是UTF-8的真实完整实现。如果需要完整实现UTF-8,可以使用utf8mb4字符集:

mysql --default-character-set=utf8mb4

此处有更多信息:What is the difference between utf8mb4 and utf8 charsets in MySQL?

答案 1 :(得分:-2)

使用utf8的这些单词“øöä”需要2个字节,所以你忘了使用wchar或utf string吗?

这是我在python中的测试代码:

s = ["Kid Interiør","Bwg Homes","If Skadeförsäkring"]
for w in s:
    print '|',w.ljust(20,' '),'|' 

结果与您的程序打印相同。 我需要做的就是更改字符串s的编码:

s = [u"Kid Interiør",u"Bwg Homes",u"If Skadeförsäkring"]
for w in s:
    print '|',w.ljust(20,' '),'|'

结果是

| Kid Interiør         |
| Bwg Homes            |
| If Skadeförsäkring   |

我没有用c ++测试,但我建议你可以使用wchar,std :: wcout。