bitsCN.com
数据库系统中,经常有些用户在输入数据的时候会不小心使用全角输入,这就有可能会导致我们的程序出错,如何解决此类问题了。
测试代码:
select cast('111' as int) as num1
select cast('111' as int) as num2
运行结果:
第一个正确显示: 111
第二个则报错: 在将 varchar 值 '111' 转换成数据类型 int 时失败。
下面使用自定义标量函数来解决这个问题:
if object_id(N'u_convert',N'FN') is not null
drop function u_convert
GO
转换原理
全角字符unicode编码从65281~65374
半角字符unicode编码从33~126
空格比较特殊,全角为 12288,半角为 32
而且除空格外,全角/半角按unicode编码排序在顺序上是对应的
所以可以直接通过用+-法来处理非空格数据,对空格单独处理
like的时候,指定排序规则 COLLATE Latin1_General_BIN
是保证字符顺序按unicode编码排序
*/
create function u_convert(
@str nvarchar(4000), --要转换的字符串
@flag bit --转换标志,0转换成半角,1转换成全角
)
returns nvarchar(4000)
AS
begin
declare
@pat nvarchar(8),
@step int,
@i int,
@spc int
if @flag=0
begin
select @pat=N'%[!-~]%',@step=-65248,
@str=replace(@str,N' ',N' ')
end
else
begin
select @pat=N'%[!-~]%',@step=65248,
@str=replace(@str,N' ',N' ')
end
set @i=patindex(@pat collate LATIN1_GENERAL_BIN,@str)
while @i>0
select @str=replace(@str,
substring(
@str,@i,1),
nchar(unicode(substring(@str,@i,1))+@step)),
@i=patindex(@pat collate LATIN1_GENERAL_BIN,@str)
return(@str)
end
GO
测试语句:
select cast('111' as int) as num1
select cast('111' as int) as num2
运行结果:
第一个正确显示: 111
第二个则报错: 在将 varchar 值 '111' 转换成数据类型 int 时失败。
下面使用自定义标量函数来解决这个问题:
if object_id(N'u_convert',N'FN') is not null
drop function u_convert
GO
转换原理
全角字符unicode编码从65281~65374
半角字符unicode编码从33~126
空格比较特殊,全角为 12288,半角为 32
而且除空格外,全角/半角按unicode编码排序在顺序上是对应的
所以可以直接通过用+-法来处理非空格数据,对空格单独处理
like的时候,指定排序规则 COLLATE Latin1_General_BIN
是保证字符顺序按unicode编码排序
*/
create function u_convert(
@str nvarchar(4000), --要转换的字符串
@flag bit --转换标志,0转换成半角,1转换成全角
)
returns nvarchar(4000)
AS
begin
declare
@pat nvarchar(8),
@step int,
@i int,
@spc int
if @flag=0
begin
select @pat=N'%[!-~]%',@step=-65248,
@str=replace(@str,N' ',N' ')
end
else
begin
select @pat=N'%[!-~]%',@step=65248,
@str=replace(@str,N' ',N' ')
end
set @i=patindex(@pat collate LATIN1_GENERAL_BIN,@str)
while @i>0
select @str=replace(@str,
substring(
@str,@i,1),
nchar(unicode(substring(@str,@i,1))+@step)),
@i=patindex(@pat collate LATIN1_GENERAL_BIN,@str)
return(@str)
end
GO
测试语句:

Mysqlviewshavelimitations: 1) theDon'tsupportallsqloperations, bintikDatamanipulationThroughviewswithjoinsorsubqueries.2) merekacanimpactperformance, terutamanya dengan komplekssum

Betul -betul

Mysqldoes'timposeahardlimitontriggers, butpracticalfactorsDeterminetheirefectiveus

Ya, It'sSsafetostoreBlobDatainMysql, ButConserthySefactors: 1) Storagespace: BlobScanconsumesignificantspace, PotensiCreaseScostSandSlowingPerformance.2)

Menambah pengguna MySQL melalui antara muka web PHP boleh menggunakan sambungan MySQLI. Langkah -langkah adalah seperti berikut: 1. Sambungkan ke pangkalan data MySQL dan gunakan sambungan MySQLI. 2. Buat pengguna, gunakan pernyataan CreateUser, dan gunakan fungsi kata laluan () untuk menyulitkan kata laluan. 3. Mencegah suntikan SQL dan gunakan fungsi mysqli_real_escape_string () untuk memproses input pengguna. 4. Berikan kebenaran kepada pengguna baru dan gunakan pernyataan geran.

Mysql'sblobissusuipableforstoringbinarydatawithinarelationaldatabase, sementara

Toaddauserinmysql, gunakan: createuser'username '@' host'identifiedby'password '; here'showtodoitsecurely: 1) choosethehostcareflelytocon trolaccess.2) SetResourcelImitSwithOptionsLikeMax_queries_per_hour.3) USESTRONG, UNIQUEPASSWORDS.4) Enforcessl/TLSConnectionswith

Toavoidcommonmistakeswithstringdatatypesinmysql, fahamistringtypenuances, choosetherighttype, danManageencodingandcollationsettingsefectively.1) usecharfarfixed-lengthstrings, varcharforvariable-length, andtext/blobforlargerdata.2)


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.
