utf-8和utf8的区别所在.

时间:2022-05-28 08:15:33
众所周知php中有设置提取数据时设置编码格式的语法:

$temp=mysql_query("set names utf-8");
查询显示数据的语句.....................;

如果我的数据库的编码格式为utf8(我用的是mysql-gui-tools)创建的表,里面选择数据库编码格式的时候没有utf-8只有utf8.所以我就选择了utf8.

如果我设置:$temp=mysql_query("set names utf-8");
查询显示数据的语句.....................; //显示数据为乱码,即ie用utf-8编码格式显示数据.
如果我设置:$temp=mysql_query("set names utf8");
查询显示数据的语句.....................; //显示数据为乱码,即ie用utf-8编码格式显示数据.
我想请问一下,utf-8和utf8是否为同一种编码呢?
还有就是如果我用命令建立表的时候可否设置编码格式为utf-8而不用utf8.?

还有一点就更奇怪了,我的表的编码格式为:utf8时,
如果我设置:$temp=mysql_query("set names gb2321");
查询显示数据的语句.....................; //显示数据正常,即ie用gb2312编码格式显示数据.请问此时在php脚本怎么能把utf8编码转换为gb2312呢,而且还不是乱码,一点道理都没有啊,大家说是吧?



30 个解决方案

#1


区别:

mysql> set names utf-8;
ERROR 1115 (42000): Unknown character set: 'utf'
mysql> set names utf8;
Query OK, 0 rows affected (0.11 sec)

#2


那么是否是说在mysql中utf8也就是我们平时说的utf-8(即英文用一个字节表示,中文用3个字节表示?)
如果是这样的话,那么我的表的编码为utf8,$temp=mysql_query("set names gb2312"),之后查询数据并输出结果,不会是乱码,而gb2312是一个汉字2个字节,想请问你一下,此时的编码是如果转换过来的呢,难道mysql_query()这个函数有转换这个功能不成? 还有如果不设置mysql_query("set names gb2312")这句话的时候,在php脚本中读取和插入数据默认的用的是什么编码?

#3


好你没什么区别。你再看一下,你表里的字段的整理一项用的是什么编码,是否是:utf8-gen**** 之类的。

#4


是没有区别的utf8-bin这些仅仅是整理集,用于说明查询和存储时的排序方式比如utf8-bin就是一个区分大小写的按照ascii码的顺序大小依次排列的整理集

#5


utf8 和 utf-8 意义一样,表示不一样而已!
比方你跟一个英国人(不懂汉语的)说汉语:我是中国人!他不明白!
然后你改口 I'm a Chinese! 他就明白了!
然后就是一句经典台词:
他明白了,你明白了么?

#6


一样,只是在mysql中用utf8而已,就是指代一种编码

#7


接楼上的,一样,只是在mysql中用utf8表示utf-8而已,就是指代一种编码。
在php中mysql_query("set names utf-8");因为mysql中定义的是utf8而不是utf-8,所以这条语句是执行不成功的,效果和mysql_query("set names test")一样,所以你存储和获得的mysql编码并没有改变。改为
mysql_query("set names utf8");就行了。

#8


mysql_query("set names gb2312"); 就是告诉mysql SELECT 出来的数据转换成gb2312.
如果mysql存的是utf8,就会自动转换成gb2312.

#9


都是一个啊,不同的地方叫法不一样

#10


学习了~

#11


写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。

#12


以后你牛了,写点东西,让在家用用,,你也可以写成 8utf  8ftu 等等

#13


引用 11 楼 xiachao2008 的回复:
写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。
utf-8和utf8的区别所在.

#14


引用 11 楼 xiachao2008 的回复:
写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。


MySQL 内流满面

#15


呵呵,,,,,,,

我只有这样认为了。


引用 14 楼 phpnewnew 的回复:
引用 11 楼 xiachao2008 的回复:

写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。


MySQL 内流满面

#16


在mysql中用utf8表示utf-8编码,其中一个很重要的原因可能是:"-"号同样代表了减法运算,而且sql语句中使用到"-"号的时候应该也很多.为了在解析sql语句时,不耗费过多的时间,这样做是有道理的。
(以上仅个人看法,没有证实过)

#17


引用 15 楼 xiachao2008 的回复:
呵呵,,,,,,,

我只有这样认为了。


引用 14 楼 phpnewnew 的回复:

引用 11 楼 xiachao2008 的回复:

写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。


MySQL 内流满面

....

#18


还真没怎么注意这个问题

#19


引用楼主 chenmeijian 的回复:
众所周知php中有设置提取数据时设置编码格式的语法: 

准确地说,你说的这个事情跟 PHP 基本上没有关系,这只是 mysql 的事情。

引用楼主 chenmeijian 的回复:
$temp=mysql_query( "set   names   utf-8 "); 
查询显示数据的语句.....................; 
如果我的数据库的编码格式为utf8(我用的是mysql-gui-tools)创建的表,里面选择数据库编码格式的时候没有utf-8只有utf8.所以我就选择了utf8. 

mysql 只认识 "utf8",不认识 "utf-8",这个只要搞清楚就好了。在自然语言中,这两者的含义没有什么特别的区别。

引用楼主 chenmeijian 的回复:
如果我设置:$temp=mysql_query( "set   names   utf-8 "); 
查询显示数据的语句.....................;   //显示数据为乱码,即ie用utf-8编码格式显示数据. 
如果我设置:$temp=mysql_query( "set   names   utf8 "); 
查询显示数据的语句.....................;   //显示数据为乱码,即ie用utf-8编码格式显示数据. 
我想请问一下,utf-8和utf8是否为同一种编码呢? 
还有就是如果我用命令建立表的时候可否设置编码格式为utf-8而不用utf8.? 

同上。

引用楼主 chenmeijian 的回复:
还有一点就更奇怪了,我的表的编码格式为:utf8时, 
如果我设置:$temp=mysql_query( "set   names   gb2321 "); 
查询显示数据的语句.....................;   //显示数据正常,即ie用gb2312编码格式显示数据.请问此时在php脚本怎么能把utf8编码转换为gb2312呢,而且还不是乱码,一点道理都没有啊,大家说是吧? 

这个是最没有什么可奇怪的,mysql 的 set names 命令的作用经常被误解,所以你会觉得奇怪。

set names 命令是用于“客户端告诉 mysql 服务器说:下面我要用 xxx 编码方式跟你说话了,你也要用这种编码方式跟我说话”。所以,这里指定的编码方式跟“数据库表的存储编码方式”没有任何关系,mysql 会替你把所需要的编码转换都做好。

utf-8和utf8的区别所在.
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具, 分享给大家,欢迎 技术交流 :)

#20


计算机都是C语言,不同的编程,代码的命名方式不同。

#21


引用 5 楼 thaiki 的回复:
utf8   和   utf-8   意义一样,表示不一样而已!
比方你跟一个英国人(不懂汉语的)说汉语:我是中国人!他不明白!
然后你改口   I 'm   a   Chinese!   他就明白了!
然后就是一句经典台词:
他明白了,你明白了么?
+++

#22


数据库是utf8 其它地方一般是utf-8

#23


过来看看喽!!!
跟着大家学习一下

#24


学习了 关注下

#25


MYSQL里没有UTF-8一说,只有UTF8;
HTML里没有UTF8一说,只有UTF-8。

#26


区别就是mysql里面是utf8,而其他编码基本是utf-8。

#27


关注下,学习了

#28


引用 11 楼 xiachao2008 的回复:
写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。
utf-8和utf8的区别所在.

#29


mark~

#30


像这样连楼主自己都不搭理的问题
还这样踊跃回帖,这只能说明 php 已经没落了

#1


区别:

mysql> set names utf-8;
ERROR 1115 (42000): Unknown character set: 'utf'
mysql> set names utf8;
Query OK, 0 rows affected (0.11 sec)

#2


那么是否是说在mysql中utf8也就是我们平时说的utf-8(即英文用一个字节表示,中文用3个字节表示?)
如果是这样的话,那么我的表的编码为utf8,$temp=mysql_query("set names gb2312"),之后查询数据并输出结果,不会是乱码,而gb2312是一个汉字2个字节,想请问你一下,此时的编码是如果转换过来的呢,难道mysql_query()这个函数有转换这个功能不成? 还有如果不设置mysql_query("set names gb2312")这句话的时候,在php脚本中读取和插入数据默认的用的是什么编码?

#3


好你没什么区别。你再看一下,你表里的字段的整理一项用的是什么编码,是否是:utf8-gen**** 之类的。

#4


是没有区别的utf8-bin这些仅仅是整理集,用于说明查询和存储时的排序方式比如utf8-bin就是一个区分大小写的按照ascii码的顺序大小依次排列的整理集

#5


utf8 和 utf-8 意义一样,表示不一样而已!
比方你跟一个英国人(不懂汉语的)说汉语:我是中国人!他不明白!
然后你改口 I'm a Chinese! 他就明白了!
然后就是一句经典台词:
他明白了,你明白了么?

#6


一样,只是在mysql中用utf8而已,就是指代一种编码

#7


接楼上的,一样,只是在mysql中用utf8表示utf-8而已,就是指代一种编码。
在php中mysql_query("set names utf-8");因为mysql中定义的是utf8而不是utf-8,所以这条语句是执行不成功的,效果和mysql_query("set names test")一样,所以你存储和获得的mysql编码并没有改变。改为
mysql_query("set names utf8");就行了。

#8


mysql_query("set names gb2312"); 就是告诉mysql SELECT 出来的数据转换成gb2312.
如果mysql存的是utf8,就会自动转换成gb2312.

#9


都是一个啊,不同的地方叫法不一样

#10


学习了~

#11


写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。

#12


以后你牛了,写点东西,让在家用用,,你也可以写成 8utf  8ftu 等等

#13


引用 11 楼 xiachao2008 的回复:
写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。
utf-8和utf8的区别所在.

#14


引用 11 楼 xiachao2008 的回复:
写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。


MySQL 内流满面

#15


呵呵,,,,,,,

我只有这样认为了。


引用 14 楼 phpnewnew 的回复:
引用 11 楼 xiachao2008 的回复:

写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。


MySQL 内流满面

#16


在mysql中用utf8表示utf-8编码,其中一个很重要的原因可能是:"-"号同样代表了减法运算,而且sql语句中使用到"-"号的时候应该也很多.为了在解析sql语句时,不耗费过多的时间,这样做是有道理的。
(以上仅个人看法,没有证实过)

#17


引用 15 楼 xiachao2008 的回复:
呵呵,,,,,,,

我只有这样认为了。


引用 14 楼 phpnewnew 的回复:

引用 11 楼 xiachao2008 的回复:

写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。


MySQL 内流满面

....

#18


还真没怎么注意这个问题

#19


引用楼主 chenmeijian 的回复:
众所周知php中有设置提取数据时设置编码格式的语法: 

准确地说,你说的这个事情跟 PHP 基本上没有关系,这只是 mysql 的事情。

引用楼主 chenmeijian 的回复:
$temp=mysql_query( "set   names   utf-8 "); 
查询显示数据的语句.....................; 
如果我的数据库的编码格式为utf8(我用的是mysql-gui-tools)创建的表,里面选择数据库编码格式的时候没有utf-8只有utf8.所以我就选择了utf8. 

mysql 只认识 "utf8",不认识 "utf-8",这个只要搞清楚就好了。在自然语言中,这两者的含义没有什么特别的区别。

引用楼主 chenmeijian 的回复:
如果我设置:$temp=mysql_query( "set   names   utf-8 "); 
查询显示数据的语句.....................;   //显示数据为乱码,即ie用utf-8编码格式显示数据. 
如果我设置:$temp=mysql_query( "set   names   utf8 "); 
查询显示数据的语句.....................;   //显示数据为乱码,即ie用utf-8编码格式显示数据. 
我想请问一下,utf-8和utf8是否为同一种编码呢? 
还有就是如果我用命令建立表的时候可否设置编码格式为utf-8而不用utf8.? 

同上。

引用楼主 chenmeijian 的回复:
还有一点就更奇怪了,我的表的编码格式为:utf8时, 
如果我设置:$temp=mysql_query( "set   names   gb2321 "); 
查询显示数据的语句.....................;   //显示数据正常,即ie用gb2312编码格式显示数据.请问此时在php脚本怎么能把utf8编码转换为gb2312呢,而且还不是乱码,一点道理都没有啊,大家说是吧? 

这个是最没有什么可奇怪的,mysql 的 set names 命令的作用经常被误解,所以你会觉得奇怪。

set names 命令是用于“客户端告诉 mysql 服务器说:下面我要用 xxx 编码方式跟你说话了,你也要用这种编码方式跟我说话”。所以,这里指定的编码方式跟“数据库表的存储编码方式”没有任何关系,mysql 会替你把所需要的编码转换都做好。

utf-8和utf8的区别所在.
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具, 分享给大家,欢迎 技术交流 :)

#20


计算机都是C语言,不同的编程,代码的命名方式不同。

#21


引用 5 楼 thaiki 的回复:
utf8   和   utf-8   意义一样,表示不一样而已!
比方你跟一个英国人(不懂汉语的)说汉语:我是中国人!他不明白!
然后你改口   I 'm   a   Chinese!   他就明白了!
然后就是一句经典台词:
他明白了,你明白了么?
+++

#22


数据库是utf8 其它地方一般是utf-8

#23


过来看看喽!!!
跟着大家学习一下

#24


学习了 关注下

#25


MYSQL里没有UTF-8一说,只有UTF8;
HTML里没有UTF8一说,只有UTF-8。

#26


区别就是mysql里面是utf8,而其他编码基本是utf-8。

#27


关注下,学习了

#28


引用 11 楼 xiachao2008 的回复:
写mysql程序员写法的一个错误 少写了了“-”还得我们全中国人都得根着他写。
utf-8和utf8的区别所在.

#29


mark~

#30


像这样连楼主自己都不搭理的问题
还这样踊跃回帖,这只能说明 php 已经没落了