비즈니스 시나리오: PHP 페이지는 1개의 입력 매개변수와 1개의 출력 매개변수가 있는 mysql 저장 프로시저를 호출합니다.
문제가 발생했습니다. 정상적으로 실행이 되지만, 데이터베이스에 매개변수를 입력하면 항상 문자가 깨져서 표시됩니다.
PHP 페이지 코드는 다음과 같습니다
<head> <meta charset="utf-8"> </head> <?php $conn = new MySQLi("数据库地址","数据库用户","密码","数据库名"); mysqli_query($conn,"SET NAMES utf8"); $info_name_cn='测试x201'; $info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8'); $result=$conn->query("CALL x2('$info_name_cn',@exeout_rows)"); $result=$conn->query("SELECT @exeout_rows"); $recordset=mysqli_fetch_assoc($result); $exeout_rows=(int)$recordset["@exeout_rows"]; ?> <div>---|<?php echo $exeout_rows; ?>|<?php echo mb_detect_encoding($exeout_rows); ?>|---</div>
mysql 저장 프로시저 코드는 다음과 같습니다
CREATE DEFINER=`数据库名`@`%` PROCEDURE `x2`( IN exein_info_name_cn VARCHAR(5) ,OUT exeout_rows int ) BEGIN set exeout_rows=1; insert into 测试表 ( info_name_cn ) values ( exein_info_name_cn ); END
mysql 데이터베이스에서 테스트 테이블의 옵션은 "utf8/utf8_ganaral_ci"이며, 문자셋과 정렬은 다음과 같습니다. 테스트 테이블의 내부 필드 info_name_cn의 순서는 "utf8/utf8_ganaral_ci"
다른 변환 방법을 시도했습니다. 다음 텍스트
지만 결과가 모두 깨졌습니다. 실행 후 결과는 다음과 같습니다
(id is) 29: 변환되지 않음
//$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');
(id is)30: UTF-8로 변환
$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');
(id is)31: GB2312로 변환
$info_name_cn= mb_convert_encoding($info_name_cn,'GBK');
(id is)32: GBK로 변환
$info_name_cn=mb_convert_encoding($info_name_cn,'GBK');
(id is)33: BIG5로 변환
$info_name_cn= mb_convert_encoding($info_name_cn,'ASCII');
(id is)34: ASCII로 변환
$info_name_cn=mb_convert_encoding($info_name_cn,'ASCII');
또한 다음 코드를 실행하면 정상적으로 작동할 수 있습니다. 데이터베이스에 중국어 추가
<?php $link = @mysql_connect("数据库地址","数据库用户名","数据库密码") or die("连接失败" .mysql_error()); @mysql_select_db("数据表") or die("连接失败".mysql_error); function insert(){ mysql_query("set names utf8"); $sqlinsert = "insert into 测试表(info_name_cn) values('李四')"; $resultinsert = mysql_query($sqlinsert); if($resultinsert){ echo "insert data success"; }else{ echo "insert data fail".mysql_error(); } } insert(); mysql_close($link); ?>
**越狱兔2019-07-22 17:03:00
보충: 같은 상황에서 파일 저장 인코딩 방식을 ASCI로 변경하였고, 페이지 코드는 GBK로 설정 후 정상적으로 실행되었습니다.