Tulis Pernyataan Transact-SQL Internasional

Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Database dan aplikasi database yang menggunakan pernyataan Transact-SQL akan menjadi lebih portabel dari satu bahasa ke bahasa lain, atau akan mendukung beberapa bahasa, jika panduan berikut diikuti:

  • Dimulai dengan SQL Server 2019 (15.x) dan di Database Azure SQL, gunakan:

    • Jenis data char, varchar, dan varchar(max) dengan kolase berkemampuan UTF-8 , dan data dikodekan menggunakan UTF-8.
    • Jenis data nchar, nvarchar, dan nvarchar(max) dengan kolase karakter tambahan (SC) diaktifkan, dan data dikodekan menggunakan UTF-16. Menggunakan kolase non-SC menghasilkan data yang dikodekan menggunakan UCS-2.

    Ini menghindari masalah konversi halaman kode. Untuk pertimbangan lain, lihat Perbedaan penyimpanan antara UTF-8 dan UTF-16.

  • Hingga SQL Server 2017 (14.x), ganti semua penggunaan jenis data char, varchar, dan varchar(max) dengan nchar, nvarchar, dan nvarchar(max). Jika menggunakan kolase karakter tambahan (SC) yang diaktifkan, data dikodekan menggunakan UTF-16. Menggunakan kolase non-SC menghasilkan data yang dikodekan menggunakan UCS-2. Ini menghindari masalah konversi halaman kode. Untuk informasi selengkapnya, lihat Kolajeasi dan Dukungan Unicode.

    Penting

    Jenis data teks tidak digunakan lagi dan tidak boleh digunakan dalam pekerjaan pengembangan baru. Rencanakan untuk mengonversi data teks ke varchar(max).

  • Saat melakukan perbandingan dan operasi bulan dan hari dalam seminggu, gunakan bagian tanggal numerik alih-alih string nama. Pengaturan bahasa yang berbeda mengembalikan nama yang berbeda untuk bulan dan hari kerja. Misalnya, DATENAME(MONTH,GETDATE()) mengembalikan May saat bahasa diatur ke Bahasa Inggris A.S. , kembali Mai saat bahasa diatur ke Bahasa Jerman, dan kembali mai saat bahasa diatur ke Bahasa Prancis. Sebagai gantinya, gunakan fungsi seperti DATEPART yang menggunakan jumlah bulan, bukan nama. Gunakan nama DATEPART saat Anda membuat tataan hasil untuk ditampilkan kepada pengguna, karena nama tanggal sering lebih bermakna daripada representasi numerik. Namun, jangan kodekan logika apa pun yang bergantung pada nama yang ditampilkan berasal dari bahasa tertentu.

  • Saat Anda menentukan tanggal dalam perbandingan atau untuk input ke pernyataan INSERT atau UPDATE, gunakan konstanta yang ditafsirkan dengan cara yang sama untuk semua pengaturan bahasa:

    • Aplikasi ADO, OLE DB, dan ODBC harus menggunakan klausa tanda waktu, tanggal, dan waktu escape ODBC:

      { ts'yyyy-mm-ddhh:mm:ss [.fff] '} seperti: { ts'1998-09-24 10:02:20'}

      { d'yyyy-mm-dd'} seperti: { d'1998-09-24'}

      { t'hh:mm:ss'} seperti: { t'10:02:20'}

    • Aplikasi yang menggunakan API lain, atau skrip Transact-SQL, prosedur tersimpan, dan pemicu, harus menggunakan string numerik yang tidak dipisahkan. Misalnya, yyyymmdd sebagai 19980924.

    • Aplikasi yang menggunakan API lain, atau skrip Transact-SQL, prosedur tersimpan, dan pemicu harus menggunakan pernyataan CONVERT dengan parameter gaya eksplisit untuk semua konversi antara waktu, tanggal, smalldate, tanggalwaktu, tanggalwaktu2, dan jenis data datetimeoffset dan jenis data string karakter. Misalnya, pernyataan berikut ditafsirkan dengan cara yang sama untuk semua pengaturan koneksi format bahasa atau tanggal:

      SELECT *  
      FROM AdventureWorks2022.Sales.SalesOrderHeader  
      WHERE OrderDate = CONVERT(DATETIME, '20060719', 101)  
      

Lihat juga

CAST dan CONVERT (Transact-SQL)
DATEPART (Transact-SQL)
Kolajeasi dan Dukungan Unicode