我有一个包含瑞典语/挪威语字符串的数据库表。
当我查询一些数据时,我得到如下输出:
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 |
+-----------------------------------+
这不是一个大问题,但它使输出更难读。有人知道如何保持表格格式不变吗?
答案 0 :(得分:105)
使用选项--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
。
为了检查所有与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?
中连接字符集的更多信息即使所有字符集变量,表和列都设置为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。