• 关于

    使用utf

    的搜索结果

问题

请问PHP中UTF8和UTF-8可以混用吗?

同事使用iconv进行编码转换时使用的时UTF8,而不是UTF-8,我测试了下发现UTF8和UTF-8在iconv和mb_str中结果是一样的,如:iconv('UTF8', 'GB2312', '测试'); 和 iconv('UTF-8'...
落地花开啦 2019-12-01 19:52:40 924 浏览量 回答数 1

回答

MySQL的utf8许可仅允许使用UTF-8中的3个字节表示的Unicode字符。在这里,您需要一个需要4个字节的字符:\ xF0 \ x90 \ x8D \ x83(U + 10343 GOTHIC LETTER SAUIL)。 如果您使用MySQL 5.5或更高版本,则可以将列编码从更改utf8为utf8mb4。此编码允许存储在UTF-8中占用4个字节的字符。 您可能还需要服务器属性设置character_set_server到utf8mb4MySQL的配置文件中 似乎Connector / J缺省为3字节Unicode,否则: 例如,要将4字节UTF-8字符集用于Connector / J,请使用配置MySQL服务器character_set_server=utf8mb4,并保留characterEncodingConnector / J连接字符串。然后,Connector / J将自动检测UTF-8设置。MySQL的utf8许可仅允许使用UTF-8中的3个字节表示的Unicode字符。在这里,您需要一个需要4个字节的字符:\ xF0 \ x90 \ x8D \ x83(U + 10343 GOTHIC LETTER SAUIL)。 如果您使用MySQL 5.5或更高版本,则可以将列编码从更改utf8为utf8mb4。此编码允许存储在UTF-8中占用4个字节的字符。 您可能还需要服务器属性设置character_set_server到utf8mb4MySQL的配置文件中 似乎Connector / J缺省为3字节Unicode,否则: 例如,要将4字节UTF-8字符集用于Connector / J,请使用配置MySQL服务器character_set_server=utf8mb4,并保留characterEncodingConnector / J连接字符串。然后,Connector / J将自动检测UTF-8设置。MySQL的utf8许可仅允许使用UTF-8中的3个字节表示的Unicode字符。在这里,您需要一个需要4个字节的字符:\ xF0 \ x90 \ x8D \ x83(U + 10343 GOTHIC LETTER SAUIL)。 如果您使用MySQL 5.5或更高版本,则可以将列编码从更改utf8为utf8mb4。此编码允许存储在UTF-8中占用4个字节的字符。 您可能还需要服务器属性设置character_set_server到utf8mb4MySQL的配置文件中 似乎Connector / J缺省为3字节Unicode,否则: 例如,要将4字节UTF-8字符集用于Connector / J,请使用配置MySQL服务器character_set_server=utf8mb4,并保留characterEncodingConnector / J连接字符串。然后,Connector / J将自动检测UTF-8设置。源:stack overflow
保持可爱mmm 2020-05-10 19:15:37 0 浏览量 回答数 0

问题

为什么我的mysql无法用中文查询

首先,我用的是阿里云虚拟主机,cenOS + mysql 5.1.48的配置,php使用了5.5的版本(新人练手)。设置数据库的时候,我已经选择默认字符是utf8了,然后数据库名称是系统默认的,表名我用了中文,列名用了中文。后台使用php连...
metoogo 2019-12-01 19:32:25 1254 浏览量 回答数 1

回答

您所拥有的EXTRATERRESTRIAL ALIEN (U+1F47D)和BROKEN HEART (U+1F494)不属于基本的多语言平台。他们不能在Java作为一个字符来表示,甚至,"".length() == 4。它们绝对不是空字符,如果您不使用支持它们的字体,则会看到正方形。 MySQL的utf8只支持基本多文种平面,你需要使用utf8mb4,而不是: 对于补充字符,utf8根本无法存储该字符,而utf8mb4需要四个字节来存储它。由于utf8根本无法存储字符,因此在utf8列中没有任何补充字符,并且在从旧版MySQL升级utf8数据时,您不必担心转换字符或丢失数据。 因此,要支持这些字符,您的MySQL必须为5.5+,并且需要在utf8mb4任何地方使用。连接编码需要为utf8mb4,字符集必须为utf8mb4,协作需要utf8mb4。对于Java来说,它仍然只是"utf-8",但是MySQL需要区别对待。 我不知道您使用的是什么驱动程序,但是与连接程序无关的一种设置连接字符集的方法是发送查询: SET NAMES 'utf8mb4' 建立连接之后。 另请参见Connector / J: 14.14:如何将4字节UTF8,utf8mb4与Connector / J一起使用? 要将4字节UTF8与Connector / J一起使用,请将MySQL服务器配置为character_set_server = utf8mb4。只要未在连接字符串中设置characterEncoding,Connector / J将使用该设置 。这等效于字符集的自动检测。 调整列和数据库: var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL 同样,您的MySQL版本需要相对最新才能获得utf8mb4支持。来源:stack overflow
保持可爱mmm 2020-05-17 13:13:04 0 浏览量 回答数 0

回答

使用ALTER DATABASE和ALTER TABLE命令。 ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 或者,如果您仍在不支持4字节UTF-8的MySQL 5.5.2或更早版本上,请使用utf8代替utf8mb4: ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 分享来源:stack overflow
保持可爱mmm 2020-05-10 17:25:14 0 浏览量 回答数 0

回答

通常,字符äåö没问题,因为浏览器和Web应用程序的tomcat / java使用的默认字符集为latin1即。“理解”这些字符的ISO-8859-1。 要使UTF-8在Java + Tomcat + Linux / Windows + Mysql下工作,需要满足以下条件: 配置Tomcat的server.xml 必须配置连接器使用UTF-8编码url(GET请求)参数: 在上面的示例中,关键部分是URIEncoding =“ UTF-8”。这可以保证Tomcat将所有传入的GET参数处理为UTF-8编码。结果,当用户将以下内容写入浏览器的地址栏时: https://localhost:8443/ID/Users?action=search&name=ж 字符ж被当作UTF-8处理,并被编码为%D0%B6(通常在到达服务器之前由浏览器访问)。 POST请求不受此影响。 CharsetFilter 然后是时候强制Java Web应用程序以UTF-8编码方式处理所有请求和响应了。这要求我们定义一个字符集过滤器,如下所示: package fi.foo.filters; import javax.servlet.*; import java.io.IOException; public class CharsetFilter implements Filter { private String encoding; public void init(FilterConfig config) throws ServletException { encoding = config.getInitParameter("requestEncoding"); if (encoding == null) encoding = "UTF-8"; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain next) throws IOException, ServletException { // Respect the client-specified character encoding // (see HTTP specification section 3.4.1) if (null == request.getCharacterEncoding()) { request.setCharacterEncoding(encoding); } // Set the default response content type and encoding response.setContentType("text/html; charset=UTF-8"); response.setCharacterEncoding("UTF-8"); next.doFilter(request, response); } public void destroy() { } } 此过滤器可确保如果浏览器未设置请求中使用的编码,则将其设置为UTF-8。 该过滤器完成的另一件事是设置默认响应编码,即。返回的html /所使用的编码。另一种方法是在应用程序的每个控制器中设置响应编码等。 该过滤器必须添加到web.xml或webapp的部署描述符中: CharsetFilter fi.foo.filters.CharsetFilter requestEncoding UTF-8 CharsetFilter /* 可以在tomcat Wiki(http://wiki.apache.org/tomcat/Tomcat/UTF-8)中找到有关创建此过滤器的说明。 JSP页面编码 在您的web.xml中,添加以下内容: *.jsp UTF-8 另外,Web应用程序的所有JSP页面都需要在其顶部具有以下内容: <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> 如果使用具有不同JSP片段的某种布局,则所有这些都需要。 HTML元标记 JSP页面编码告诉JVM以正确的编码处理JSP页面中的字符。然后是时候告诉浏览器html页面的编码方式了: 这是通过在webapp生成的每个xhtml页面顶部执行以下操作来完成的: ... JDBC连接 使用数据库时,必须定义该连接使用UTF-8编码。可以在context.xml或以下定义了JDBC连接的地方完成: MySQL数据库和表 使用的数据库必须使用UTF-8编码。这是通过使用以下内容创建数据库来实现的: CREATE DATABASE `ID_development` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci */; 然后,所有表也都必须使用UTF-8: CREATE TABLE `Users` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(30) collate utf8_swedish_ci default NULL PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=DYNAMIC; 关键部分是CHARSET = utf8。 MySQL服务器配置 还必须配置MySQL serveri。通常,这是在Windows中通过修改my.ini -file和在Linux中通过配置my.cnf -file来完成的。在这些文件中,应该定义所有连接到服务器的客户端都使用utf8作为默认字符集,并且服务器使用的默认字符集也是utf8。 [client] port=3306 default-character-set=utf8 [mysql] default-character-set=utf8 MySQL的程序和功能 这些还需要定义字符集。例如: DELIMITER $$ DROP FUNCTION IF EXISTS `pathToNode` $$ CREATE FUNCTION `pathToNode` (ryhma_id INT) RETURNS TEXT CHARACTER SET utf8 READS SQL DATA BEGIN DECLARE path VARCHAR(255) CHARACTER SET utf8; SET path = NULL; ... RETURN path; END $$ DELIMITER ; GET请求:latin1和UTF-8 如果并且在tomcat的server.xml中定义了GET请求参数以UTF-8编码时,以下GET请求将得到正确处理: https://localhost:8443/ID/Users?action=search&name=Petteri https://localhost:8443/ID/Users?action=search&name=ж 由于latin1和UTF-8均以相同的方式编码ASCII字符,因此正确处理了字符串“ Petteri”。 拉丁语1完全不了解西里尔字母ж。由于指示Tomcat将请求参数处理为UTF-8,因此它将该字符正确编码为%D0%B6。 如果并且当指示浏览器读取UTF-8编码的页面(带有请求标头和html meta-tag)时,至少Firefox 2/3和此期间的其他浏览器都将字符本身编码为%D0%B6。 最终结果是,找到了所有名称为“ Petteri”的用户,还找到了所有名称为“ж”的用户。 但是äåö呢? HTTP规范定义默认情况下,URL编码为latin1。这导致firefox2,firefox3等对以下内容进行编码 https://localhost:8443/ID/Users?action=search&name=*Päivi* 进入编码版本 https://localhost:8443/ID/Users?action=search&name=*P%E4ivi* 在latin1中,字符ä编码为%E4。即使页面/请求/所有内容都定义为使用UTF-8。ä的UTF-8编码版本为%C3%A4 结果是,由于某些字符在latin1中编码,而另一些字符在UTF-8中编码,因此webapp完全不可能正确地处理GET请求中的请求参数。 注意:如果页面被定义为UTF-8,则POST请求确实可以工作,因为浏览器完全以UTF-8格式编码来自表单的所有请求参数。 读物 非常感谢以下作者为我的问题提供了答案: http://tagunov.tripod.com/i18n/i18n.html http://wiki.apache.org/tomcat/Tomcat/UTF-8 http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/ http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-tomcat-jsp-etc.html http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-for-mysql-tomcat.html http://jeppesn.dk/utf-8.html http://www.nabble.com/request-parameters-mishandle-utf-8-encoding-td18720039.html http://www.utoronto.ca/webdocs/HTMLdocs/NewHTML/iso_table.html http://www.utf8-chartable.de/ 重要的提示 mysql支持使用3字节UTF-8字符的基本多语言平面。如果您需要超出此范围(某些字母需要超过3个字节的UTF-8字节),则需要使用一种VARBINARY列类型的样式或使用utf8mb4字符集(这需要MySQL 5.5.3或更高版本)。请注意,使用utf8MySQL中的字符集无法100%地工作。 Tomcat与Apache 还有一件事,如果您使用的是Apache + Tomcat + mod_JK连接器,则还需要进行以下更改: 将URIEncoding =“ UTF-8”添加到8009连接器的tomcat server.xml文件中,由mod_JK连接器使用。 转到你的apache文件夹即/etc/httpd/conf添加AddDefaultCharset utf-8在httpd.conf file。注意:首先检查它是否存在。如果存在,您可以使用此行对其进行更新。您也可以在底部添加此行。来源:stack overflow
保持可爱mmm 2020-05-10 17:04:59 0 浏览量 回答数 0

回答

可以 echo "测试" 确认是否终端可以显示中文。如果终端不能显示中文,使用 locale 命令确认与系统编码是否是 utf-8: $ locale LANG=C.UTF-8 LANGUAGE= LC_CTYPE="C.UTF-8" LC_NUMERIC="C.UTF-8" LC_TIME="C.UTF-8" LC_COLLATE="C.UTF-8" LC_MONETARY="C.UTF-8" LC_MESSAGES="C.UTF-8" LC_PAPER="C.UTF-8" LC_NAME="C.UTF-8" LC_ADDRESS="C.UTF-8" LC_TELEPHONE="C.UTF-8" LC_MEASUREMENT="C.UTF-8" LC_IDENTIFICATION="C.UTF-8" LC_ALL=C.UTF-8
khachapuri 2019-12-02 00:19:26 0 浏览量 回答数 0

回答

根据 libiconv-1.14/lib/encodings.def , UTF-8和UTF8都会被识别成utf8编码,所以没有区别,所以所有使用libiconv的程序都没问题,比如php的iconv库。 /* General multi-byte encodings */ DEFENCODING(( "UTF-8", /* IANA, RFC 2279 */ /*"UTF8", JDK 1.1 */ /*"CP65001", Windows */ ), utf8, { utf8_mbtowc, NULL }, { utf8_wctomb, NULL }) #ifdef USE_HPUX_ALIASES DEFALIAS( "UTF8", /* HP-UX */ utf8) #endif 根据 ext/mbstring 的 mbfilter_utf8.c ,UTF-8 (作为name/mimename) 和 UTF8 (作为alias)也都可以被识别,所以也一样。 static const char *mbfl_encoding_utf8_aliases[] = {"utf8", NULL}; const mbfl_encoding mbfl_encoding_utf8 = { mbfl_no_encoding_utf8, "UTF-8", "UTF-8", (const char *(*)[])&mbfl_encoding_utf8_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS }; 顺便说一下,mysql不识别 utf-8,必须用utf8。 mysql> create table t1 (id int primary key, name int) character set utf-8; ERROR 1115 (42000): Unknown character set: 'utf'
落地花开啦 2019-12-02 02:42:48 0 浏览量 回答数 0

回答

您列出了五个主要的CHARACTER SET麻烦案例。 最佳实践 展望未来,最好使用CHARACTER SET utf8mb4和COLLATION utf8mb4_unicode_520_ci。(管道中有更新版本的Unicode排序规则。) utf8mb4是的超集utf8,它处理4字节utf8代码,表情符号和某些中文需要这些代码。 在MySQL之外,“ UTF-8”是指所有大小的编码,因此实际上与MySQL相同utf8mb4,而不是utf8。 在下文中,我将尝试使用这些拼写和大写字母来区分MySQL内部和外部。 您应该做什么概述 将您的编辑器等设置为UTF-8。 HTML表单应以开头 。 将您的字节编码为UTF-8。 建立UTF-8作为客户端中使用的编码。 声明列/表CHARACTER SET utf8mb4(使用进行检查SHOW CREATE TABLE。) 在HTML的开头 存储的例程获取当前的字符集/排序规则。他们可能需要重建。 UTF-8贯穿始终 有关计算机语言的更多详细信息(及其后续部分) 测试数据 使用工具或工具查看数据SELECT是不可信的。太多这样的客户端,尤其是浏览器,试图补偿不正确的编码,并向您显示正确的文本,即使数据库已损坏。因此,选择一个包含非英语文本的表和列,然后执行 SELECT col, HEX(col) FROM tbl WHERE ... 正确存储的UTF-8的十六进制将为 对于空格(任何语言): 20 对于英语: 4x,5x,6x,或者7x 在西欧大部分地区,带重音符号的字母应为 Cxyy 西里尔文,希伯来文和波斯文/阿拉伯文: Dxyy 亚洲大部分地区: Exyyzz 表情符号和一些中文: F0yyzzww 更多细节 出现问题的具体原因和解决方法 截断的文字(Se为Señor): 要存储的字节未编码为utf8mb4。解决这个问题。 另外,在读取过程中检查连接是否为UTF-8。 黑钻石与问号(Se�or对Señor); 存在以下情况之一: 情况1(原始字节不是 UTF-8): 要存储的字节未编码为utf8。解决这个问题。 的连接(或SET NAMES为)INSERT 和所述SELECT不UTF8 / utf8mb4。解决这个问题。 另外,检查数据库中的列是否为CHARACTER SET utf8(或utf8mb4)。 情况2(原始字节为 UTF-8): 的连接(或SET NAMES)SELECT不是utf8 / utf8mb4。解决这个问题。 另外,检查数据库中的列是否为CHARACTER SET utf8(或utf8mb4)。 仅当浏览器设置为时,才会出现黑色菱形 。 问号(常规的,不是黑钻石)(Se?or用于Señor): 要存储的字节未编码为utf8 / utf8mb4。解决这个问题。 数据库中的列不是CHARACTER SET utf8(或utf8mb4)。解决这个问题。(使用SHOW CREATE TABLE。) 另外,在读取过程中检查连接是否为UTF-8。 Mojibake(Señorfor Señor):(此讨论也适用于Double Encoding,它不一定可见。) 要存储的字节需要UTF-8编码。解决这个问题。 当INSERTing和SELECTing文本的连接需要指定utf8或utf8mb4。解决这个问题。 该列需要声明CHARACTER SET utf8(或utf8mb4)。解决这个问题。 HTML应该以开头 。 如果数据看起来正确,但排序不正确,则说明您选择了错误的排序规则,或者没有适合您的排序规则,或者您使用Double Encoding。 通过执行SELECT .. HEX ..上述操作,可以确认双重编码。 é should come back C3A9, but instead shows C383C2A9 The Emoji  should come back F09F91BD, but comes back C3B0C5B8E28098C2BD 也就是说,十六进制的长度大约是它的两倍。这是由于从latin1(或任何其他形式)转换为utf8,然后将这些字节视为latin1并重复转换而引起的。排序(和比较)无法正常进行,因为例如,排序就像字符串是Señor。来源:stack overflow
保持可爱mmm 2020-05-08 09:56:27 0 浏览量 回答数 0

回答

您在这里混的API,mysql_*并且mysqli_*不混合。您应该坚持使用mysqli_(无论如何看起来还是这样),因为mysql_*不赞成使用函数,并且在PHP7中将其完全删除了。 您的实际问题是某个地方的字符集问题。这里有一些指针可以帮助您为应用程序获取正确的字符集。这涵盖了开发PHP / MySQL应用程序时可能会遇到的大多数一般问题。 您整个应用程序中的所有属性都必须设置为UTF-8 将文档另存为UTF-8(不带BOM)(如果您使用的是Notepad ++,则为Format-> Convert to UTF-8 w/o BOM) PHP和HTML中的标头都应设置为UTF-8 HTML(内部标签): PHP(在文件顶部,在任何输出之前): header('Content-Type: text/html; charset=utf-8'); 连接到数据库后,将连接对象的字符集设置为UTF-8,如下所示(直接在连接之后) mysqli_set_charset($conn, "utf8"); /* Procedural approach / $conn->set_charset("utf8"); / Object-oriented approach / 这是针对的mysqli_,还有与mysql_*和PDO 类似的(请参见此答案的底部)。 还要确保将数据库和表设置为UTF-8,您可以像这样进行操作: ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; (任何已存储的数据都不会转换为正确的字符集,因此您需要使用干净的数据库来执行此操作,如果字符损坏则需要在执行此操作后更新数据)。 如果使用json_encode(),则可能需要应用该JSON_UNESCAPED_UNICODE标志,否则它将特殊字符转换为等效的十六进制字符。 请记住,一切的代码需要被设置为UFT-8的整条管线,否则你可能在你的应用体验破字。 除了此列表之外,可能还有一些具有用于指定字符集的特定参数的函数。手册将告诉您这一点(例如htmlspecialchars())。 还有一些针对多字节字符的特殊功能,例如:strtolower()不会降低多字节字符,因为您必须使用它mb_strtolower(),请参见此实时演示。 注1:请注意,其某处标记为utf-8(带破折号),某处标记为(无破折号utf8)。重要的是要知道什么时候使用,因为它们通常是不可互换的。例如,HTML和PHP需要utf-8,而MySQL则不需要。 注2:在MySQL中,“字符集”和“排序规则”不是同一回事,请参见编码和排序规则之间的区别?。两者都应设置为utf-8;通常排序规则应为utf8_general_ci或utf8_unicode_ci,请参见UTF-8:常规?斌吗 Unicode?。 注意3:如果您使用表情符号,则需要在数据库和连接中使用utf8mb4字符集而不是standard 来指定MySQL utf8。HTML和PHP将只有UTF-8。 使用mysql_和PDO 设置UTF-8 PDO:这是在对象的DSN中完成的。注意该charset属性, $pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "user", "pass"); mysql_:这样做非常类似于mysqli_*,但是它没有将连接对象作为第一个参数。 mysql_set_charset('utf8');来源:stack overflow
保持可爱mmm 2020-05-10 18:27:33 0 浏览量 回答数 0

问题

UTF-8:一般?斌吗 Unicode?

我试图弄清楚我应该对各种类型的数据使用哪种排序规则。我要存储的内容的100%是用户提交的。 我的理解是,我应该使用UTF-8 General CI(不区分大小写),而不...
保持可爱mmm 2020-05-11 10:59:46 0 浏览量 回答数 1

问题

screen下ncurses字符错位

用putty登录到debian机,然后在screen中运行dpkg-reconfigure locales:不使用screen时正常: 语言环境变量: LANG=zh_CN.UTF-8 LANGUAGE= LC_CTYPE="zh_CN....
a123456678 2019-12-01 20:06:28 797 浏览量 回答数 1

问题

修复损坏的UTF-8编码

我正在修复一些错误的UTF-8编码。我目前正在使用PHP 5和MySQL。 在我的数据库中,我有一些编码错误的实例,例如:ƒ 数据库整理是utf8_general_ci PHP使用的是正确的UT...
保持可爱mmm 2020-05-11 10:38:32 0 浏览量 回答数 1

回答

数据存储: utf8mb4在数据库的所有表和文本列上指定字符集。这使得MySQL在物理上存储和检索以UTF-8本地编码的值。注意,utf8mb4如果utf8mb4_*指定了排序规则(没有任何显式字符集),MySQL将隐式使用编码。 在旧版本的MySQL(<5.5.3)中,不幸的是,您将被迫utf8仅使用,仅支持Unicode字符的一部分。我希望我在开玩笑。 资料存取: 在您的应用程序代码(例如PHP)中,无论使用哪种数据库访问方法,都需要将连接字符集设置为utf8mb4。这样,当MySQL将数据交给您的应用程序时,MySQL不会从其本地UTF-8进行转换,反之亦然。 一些驱动程序提供了自己的配置连接字符集的机制,该机制既可以更新其自身的内部状态,又可以将要在连接上使用的编码通知MySQL-这通常是首选方法。在PHP中: 如果您使用PHP≥5.3.6的PDO抽象层,则可以charset在DSN中指定: $dbh = new PDO('mysql:charset=utf8mb4'); 如果您使用的是mysqli,则可以调用set_charset(): $mysqli->set_charset('utf8mb4'); // object oriented style mysqli_set_charset($link, 'utf8mb4'); // procedural style 如果您坚持使用普通的mysql,但碰巧正在运行PHP≥5.2.3,则可以致电mysql_set_charset。 如果驱动程序不提供自己的设置连接字符集的机制,则可能必须发出查询以告知MySQL您的应用程序期望连接上的数据如何被编码:SET NAMES 'utf8mb4'。 关于utf8mb4/ utf8适用与上述相同的考虑。 输出: 如果您的应用程序将文本传输到其他系统,则还需要告知他们字符编码。对于Web应用程序,必须告知浏览器发送数据的编码(通过HTTP响应标头或HTML元数据)。 在PHP中,您可以使用default_charsetphp.ini选项,或Content-Type自己手动发出MIME标头,这虽然工作更多,但效果相同。 使用编码输出时json_encode(),请添加JSON_UNESCAPED_UNICODE作为第二个参数。 输入: 不幸的是,在尝试存储或在任何地方使用它之前,您应该验证每个收到的字符串都是有效的UTF-8。PHP mb_check_encoding()可以解决问题,但您必须谨慎使用。真的没有办法解决这个问题,因为恶意客户端可以使用他们想要的任何编码来提交数据,而且我还没有找到使PHP可靠地为您执行此操作的技巧。 从我对当前HTML规范的阅读中,对于现代HTML,以下子项目不再是必需的,甚至不再有效。我的理解是浏览器将使用为文档指定的字符集并提交数据。但是,如果您定位的是旧版HTML(XHTML,HTML4等),则以下几点可能仍然有用: 仅适用于HTML5之前的HTML:您希望浏览器发送给您的所有数据都使用UTF-8。不幸的是,如果您唯一可靠的方法是将该accept-charset属性添加到所有 代码中:<form ... accept-charset="UTF-8">。 仅对于HTML5之前的HTML:请注意,W3C HTML规范指出,客户端“应”默认使用服务器提供的任何字符集将表单发送回服务器,但这显然仅是建议,因此需要在每一个服务器上都明确标签。 其他代码注意事项: 显然,您将要提供的所有文件(PHP,HTML,JavaScript等)都应使用有效的UTF-8进行编码。 您需要确保每次处理UTF-8字符串时,都必须安全进行。不幸的是,这是最困难的部分。您可能需要大量使用PHP的mbstring扩展。 PHP的内置字符串操作默认情况下不是 UTF-8安全的。 您可以使用正常的PHP字符串操作(例如串联)安全地进行某些操作,但是对于大多数事情,您应该使用等效的mbstring功能。 要知道您在做什么(请阅读:不要搞砸),您确实需要了解UTF-8及其在最低级别上的工作方式。查看utf8.com上的任何链接,以获取一些好的资源,以学习您需要了解的所有内容。
保持可爱mmm 2020-05-08 09:43:44 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档  问题描述:虚拟主机通过控制面板的DMS工具导入MySQL出现如下报错:问题原因:目前虚拟主机配备的MySQL数据库版本是5.1.48,不支持utf8mb4字符集,需要MySQL 5.5以上才支持。解决方法:使用记事本打开.sql文件,通过ctrl+h将该文件的中的CHARSET = utf8mb4全部替换成CHARSET = utf8,将COLLATE = utf8mb4_unicode_ci 全部替换为COLLATE = utf8_general_ci,然后重新导入测试,修改之前建议先对源文件做备份。注意:如果的确需要使用utf8mb4字符集,可以购买使用MySQL 5.5以上版本的RDS服务。如问题还未解决,请联系售后技术支持  
2019-12-01 23:20:48 0 浏览量 回答数 0

回答

MySQL 官方论坛上有个帖子,跟你的问题一样: This error happens when MySQL cannot determine the collate to use for the comparation. SELECT id, name FROM table WHERE name = CONVERT(@varname USING utf8) COLLATE utf8_general_ci; See: http://dev.mysql.com/doc/refman/5.0/en/charset-collate-tricky.html Solution: (Spanish) http://www.pabloviquez.com/2009/05/illegal-mix-of-collations%E2%80%A6/ http://forums.mysql.com/read.php?103,265345,265579#msg-265579###### 另外这里是另外一些介绍资料: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '=' 过去碰到过乱码问题,现在又碰到个字符集问题。 ---------------------------------- 当前,utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt 、Tatar、Bashkir和Mari。    utf8_unicode_ci的最主要的特色是支持扩展,即当把一个字母看作与其它字母组合相等时。例如,在德语和一些其它语言中‘ß’等于‘ss’。    utf8_general_ci是一个遗留的 校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的 校对规则相比,比较正确性较差)。    例如,使用utf8_general_ci和utf8_unicode_ci两种 校对规则下面的比较相等:    Ä = A    Ö = O    Ü = U    两种校对规则之间的区别是,对于utf8_general_ci下面的等式成立:    ß = s    但是,对于utf8_unicode_ci下面等式成立:    ß = ss    对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集 校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。    utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确 ###### 只要修改一下表的字符集就可以了,如下: ALTER TABLE users CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; http://www.simplemachines.org/community/index.php?topic=385836.0<这里讲的很详细>
爱吃鱼的程序员 2020-06-02 17:32:49 0 浏览量 回答数 0

回答

4字节Unicode字符尚未得到广泛使用,因此并不是每个应用程序都完全支持它们。正确配置后,MySQL 5.5可以很好地使用4字节字符-检查您的其他组件是否也可以使用它们。 还有其他一些要检查的内容: 除了设置客户端和服务器字符集(例如ALTER TABLE mytable charset=utf8mb4, MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4,MODIFY COLUMN textfield2 VARCHAR(255) CHARACTER SET utf8mb4;,等等)之外,确保所有表的默认字符集和文本字段都转换为utf8mb4 。 如果您的数据已经在utf8字符集中,则应将其转换为utf8mb4,而不会出现任何问题。与往常一样,请先备份数据,然后再尝试! 还要确保您的应用程序层将其数据库连接的字符集设置为utf8mb4。请仔细检查这是否确实在发生–如果您运行的是所选框架的mysql客户端库的旧版本,则可能未使用utf8mb4支持对其进行编译,因此无法正确设置字符集。如果没有,您可能必须自己对其进行更新或编译。 通过mysql客户端查看数据时,请确保您所在的计算机可以显示表情符号,并SET NAMES utf8mb4在运行任何查询之前运行。 一旦您的应用程序的每个级别都可以支持新字符,您就应该能够使用它们而不会出现任何损坏来源:stack overflow
保持可爱mmm 2020-05-10 23:12:18 0 浏览量 回答数 0

问题

RDS MySQL使用utf8mb4字符集存储emoji表情

基本原则 如果要实现存储 emoji 表情到 RDS MySQL 实例,需要客户端、到 RDS MySQL 实例的连接、RDS 实例内部 3 个方面统一使用或者支持 utf8mb4 字符集。 注:关于 utf...
云栖大讲堂 2019-12-01 21:32:35 1948 浏览量 回答数 0

问题

技术运维问题 - MYSQL使用 -RDS for MySQL 如何修改 utf8mb4 字符集

修改库:    ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;修改表:ALTER TABLE...
李沃晟 2019-12-01 21:43:14 986 浏览量 回答数 0

问题

iOS使用ASIHTTPRequest请求过来的数据中包含utf-8字符 ? 400 报错

iOS使用ASIHTTPRequest请求过来的数据中包含utf-8字符 ? 400 报错 在使用ASIHTTPRequest请求一个接口时,使用NLog打印出返回的Json串,发现有很少一部分汉字显...
爱吃鱼的程序员 2020-06-04 13:14:03 0 浏览量 回答数 1

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT