为什么 数据库提取中文是乱码?

为什么 数据库提取中文是乱码?,第1张

从后台读取数据时,通常会出现乱码情况,比如“汉字”变成“?”等,造成这种情况的原因通常是编码设置不对,解决方法如下:

第一种方法:在php中添加如下代码,将编码格式设为“utf-8”,代码如下:

header("Content-Type: text/htmlcharset=UTF-8")

第二种方法:在php中添加另外一行代码,同样用来转码,代码如下:

$conn = mysqli_connect($servername, $username, $password, $mysqlname)

$conn->query("SET NAMES utf8")

该种情况是先创建链接,之后再转码。

另外,在使用数据库时,直接手动(非代码)建表,通常会在表中输入汉字时,浏览时无法显示或显示为“?”,造成这种情况的原因也是编码问题,解决方案如下:

在建表或建库时,表和库的编码格式一定要统一,设置成:“utf8_general_ci”,如下图:

代码如下:

CREATE PROCEDURE sp_str

(

IN p_str VARCHAR(50), /*原始字符串*/

IN p_begin_str VARCHAR(50), /*要匹配的起始字符串*/

IN p_end_str VARCHAR(50)) /*要匹配的结束字符串*/

OUT p_result VARCHAR(50)) /*返回结果*/

NOT DETERMINISTIC

SQL SECURITY DEFINER

COMMENT ''

BEGIN

DECLARE m_len INT DEFAULT 0

DECLARE m_index INT DEFAULT 0

/*计算第一个匹配字符串的索引位置*/

select locate(p_begin_str,p_str)+char_length(p_begin_str) into m_index

/*计算第一个匹配字符串的长度*/

select locate(p_end_str,p_str,m_index) into m_len

select SUBSTRING(p_str,m_index,m_len-m_index) INTO p_result

END

执行:

CALL sp_str('[]abcd[12345]aa[]ss','abcd[',']',@result)

返回值 @result 为12345

call sp_str('[]abcd[sdww]aa[]ss','abcd[',']',@result)

返回值 @result 为sdww

如果不用存储过程,可以直接写sql语句实现:

代码如下:

select SUBSTRING(

']abcd[12345]111[]',

locate('abcd[',']abcd[12345]111[]')+CHAR_LENGTH('abcd['),

locate(']',']abcd[12345]111[]',CHAR_LENGTH('abcd['))-

(select locate('abcd[',']abcd[12345]111[]')+CHAR_LENGTH('abcd['))

)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9912420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存