【发布时间】:2019-11-19 22:24:40
【问题描述】:
我从经典的 ASP 页面连接到 MySQL 版本 5.5.50-log。
MySQL 数据库设置如下:
- 数据库字符集:utf8mb4
- 数据库排序规则:utf8mb4_general_ci
表格和字段:
- 字符集:utf8mb4
- 排序规则:utf8mb4_general_ci
为了测试,我在表中有数据,其中包含以下字符串:????(T_T) é, è, à, ç
这是来自 SQLyog 的数据截图:
这是我的测试网页:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
</head>
<body>
<p>Pasted directly from database field: ????(T_T) é, è, à, ç</p>
<p>Returned from SQL statement: ?(T_T) é, è, à, ç</p>
</body>
</html>
问题不在于 emoji 数据无法在网页上显示,因为直接从 MySQL 粘贴的内容看起来很好。问题是,一旦通过 ODBC 驱动程序从 MySQL 的 SQL Select 返回数据,它就不能正确呈现。
我在 ASP 代码中有如下设置:
Response.CodePage = 65001
Response.CharSet = "utf-8"
我尝试过其他变体 - 例如
Response.CodePage = 1252
Response.LCID = 1060
Response.Charset = "utf-8"
但他们没有任何区别。
我已经尝试了一系列 MySQL ODBC 驱动程序 - 例如。
''----------------------
''connection string
''----------------------
Dim oConn
set oConn = Server.CreateObject("ADODB.Connection")
'oConn.Open "DRIVER={MySQL ODBC 5.1 Driver}; Server=localhost; Database=mydb; User=root; Password=testing; Option=3; CharSet=utf8mb4; stmt=SET NAMES 'utf8mb4';"
这样不行……
我尝试使用系统 DSN 来代替这些驱动程序:
- MySQL ODBC 5.1 驱动程序
- MySQL ODBC 8.0 Unicode 驱动程序
- MySQL ODBC 8.0 ANSI 驱动程序
他们都没有解决问题。
我想知道有没有办法解决这个问题,或者基本上没有办法显示使用 Classic ASP 从 MySQL 数据库中检索到的表情符号数据?
据我所知,从其他地方阅读,MySQL 数据库设置正确,支持存储表情符号字符,这一事实证实了我可以毫无问题地查看它存储在数据库中的事实。只是当我尝试通过经典 ASP 到 MySQL 连接将其从数据库中拉出时,表情符号字符才不会显示。
编辑 - ASP 页面本身保存为 UTF-8 编码文件:
【问题讨论】:
-
仅使用
Response是不够的,ASP 页面需要以正确的编码保存,并且必须告知 IIS 将其读取为 UTF-8。见this answer。 -
@Lankymart - 感谢您的回复。该页面保存为 UTF-8,我在问题末尾添加了一个屏幕截图以确认为编辑。
-
建议通过these steps 并检查每个关闭。如果按照这些操作后仍然无法正常工作,我也会查看您正在使用的驱动程序。
-
感谢@Lankymart - 我已将其设置在页面的最顶部:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>并根据您对所链接答案的建议设置 response.codepage 和 charset。没有喜悦。我已经尝试过 ODBC 8、5.1 和 3.51,但它们都没有成功。我尝试了连接字符串方法,并使用带有字符集和初始语句设置为set names utf8mb4或set names 'utf8mb4'的系统 DNS,没有任何效果......我想我必须放弃它! -
@Fehu 我从来没有让它工作。最后,我在需要提取可能包含表情符号数据的数据的页面上使用了 PHP。抱歉,我没有解决办法。
标签: mysql asp-classic odbc