Senario perniagaan: Halaman php memanggil prosedur tersimpan mysql, yang mempunyai 1 parameter input dan 1 parameter output.
Masalah berlaku: Ia boleh dilaksanakan seperti biasa, tetapi selepas memasukkan parameter ke dalam pangkalan data, aksara bercelaru sentiasa dipaparkan.
Kod halaman PHP adalah seperti berikut
<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>
Kod prosedur yang disimpan mysql adalah seperti berikut
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
Dalam pangkalan data mysql, pilihan jadual ujian ialah "utf8/utf8_ganaral_ci", dan set aksara dan susun susunan info_name_cn medan dalaman bagi jadual ujian ialah "utf8/ utf8_ganaral_ci"
Saya mencuba kaedah penukaran yang berbeza - teks berikut
tetapi keputusan semuanya bercelaru - keputusan selepas pelaksanaan adalah seperti berikut
(id ialah) 29: Tidak ditukar
//$info_name_cn=mb_convert_encoding($info_name_cn,' UTF-8');
(id is)30: Tukar ke UTF-8
$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');
(id is)31: Tukar ke GB2312
$info_name_cn= mb_convert_encoding($info_name_cn,'GBK');
(id is)32: Tukar ke GBK
$info_name_cn=mb_convert_encoding($info
_encoding($info
_encoding");
(id is)33: Tukar kepada BIG5
$info_name_cn= mb_convert_encoding($info_name_cn,'ASCII');
(id is)34: Tukar ke ASCII
$info_name_cn=mb_convert_encoding($info
Selain itu, menjalankan kod berikut boleh berfungsi seperti biasa Tambahkan bahasa Cina ke pangkalan data
<?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); ?>
*.masalah pengekodan fail php
Tambahan: Dalam situasi yang sama, saya menukar kaedah pengekodan menyimpan fail kepada ASCI, dan kod halaman berjalan seperti biasa selepas menetapkannya kepada GBK.