我有一个包含瑞典/挪威字符串的数据库表。
当我查询一些数据时,我得到的输出如下:
使用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 |
+-----------------------------------+
问题:
这不是一个大问题,但它使输出更难阅读。有人知道如何保持表格格式的完整性吗?
发布于 2011-07-22 17:42:26
简短的回答
使用选项--default-character-set=utf8
启动客户端
mysql --default-character-set=utf8
您可以在/etc/mysql/my.cnf
文件中将其设置为默认值。
[mysql]
default-character-set=utf8
简短的回答不起作用,请阅读“咆哮”。
上面的命令强制character_set_client
、character_set_connection
和character_set_results
配置变量为utf8
。
为了检查所有与字符集相关的配置变量的值,您可以运行:
show variables like '%char%';
character_set_database
提供您所在的当前数据库(模式)的字符集。缺省情况下,除非在CREATE
语句中显式指定,否则将使用character_set_server
中指定的字符集创建模式和表。
可以在my.cnf
文件中更改character_set_server
:
[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
,也可能会在屏幕上看到奇怪的字符。例如,某人可能已经通过具有latin1
连接的客户端在utf8
列中写入了Unicode字符(例如,通过运行mysql --default-character-set=latin1
)。在这种情况下,您需要使用与写入的值相同的字符集连接到数据库。您还可以通过正确的编码来检索和重写它们。
mysql :正如评论所指出的, utf8
编码并不是UTF8的真正和完整的实现。如果需要完整的UTF-8实现,可以使用utf8mb4
字符集:
mysql --default-character-set=utf8mb4
更多信息请点击此处:What is the difference between utf8mb4 and utf8 charsets in MySQL?
发布于 2011-07-22 17:27:23
这些带有utf8的单词"øöä“需要2个字节,所以你忘了使用wchar或utf字符串了吗?
下面是我用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。
https://stackoverflow.com/questions/6787824
复制相似问题