Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

China SQL

Estas en el tema de China SQL en el foro de SQL Server en Foros del Web. Hola a todos Tengo un megasuperproblema y quiero morir... Tengo una aplicación hecha en ASP.Net la cual se llevará a distintos sitios del mundo, entre ...
  #1 (permalink)  
Antiguo 23/09/2009, 16:00
 
Fecha de Ingreso: julio-2008
Mensajes: 26
Antigüedad: 15 años, 9 meses
Puntos: 0
China SQL

Hola a todos

Tengo un megasuperproblema y quiero morir...

Tengo una aplicación hecha en ASP.Net la cual se llevará a distintos sitios del mundo, entre otros CHINA.
Como son medios codos aqui... quieren que en 1 sola base de datos aguante la aplicacion de todo el mundo razon por la cual tengo mi problema.
En un principio yo tenía entendido que cada site tendría su propia BD y todo bien, pero no... el punto es que cuando inserto algun caracter en CHINO a la BD me guarda puros signos de interrogación ??????
Segun mi poder de entendimiento usando la maravilla de COLLATE se arreglaría, pero no.
Decidi crear otra tabla con la misma estructura pero cambiandole el collate a CHINO ASI

Código:
CREATE TABLE [dbo].[TBL_TRACK_ZH2](
	[ID_LOG] [int] NOT NULL,
	[ID_FULL] [int] NOT NULL,
	[SERIAL_NUM] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
	[ID_DEFECT] [int] NULL,
	[ID_ERROR] [int] NOT NULL,
	[ID_STATION] [int] NOT NULL,
	[DATE_IN] [datetime] NULL,
	[SYMPTOM] [nvarchar](255) COLLATE Chinese_PRC_CI_AS-16   NULL,
	[REF_COMP] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
	[PATH_LOG] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
	[STATUS] [char](4) COLLATE Chinese_PRC_CI_AS NULL,
	[NOTES] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
	[ID_USER] [int] NULL,
	[ID_ACT] [int] NULL,
	[ID_REACT] [int] NULL,
 CONSTRAINT [PK_TBL_TRACK_2] PRIMARY KEY CLUSTERED 
(
	[ID_LOG] ASC
)WITH FILLFACTOR = 90 ON [PRIMARY]
) ON [PRIMARY]
Y segun mis nervios podría hacer mis inserts con caracteres chinos sin problemas, pero no fué cierto

Código:
INSERT INTO [MDS].[dbo].[TBL_TRACK_ZH]
           ([ID_LOG]
           ,[ID_FULL]
           ,[SERIAL_NUM] 
           ,[ID_DEFECT]
           ,[ID_ERROR]
           ,[ID_STATION]
           ,[SYMPTOM] 
           )
     VALUES
           (1,5,'查找互联网上的商户',1,1,1,'自治区‎')
he pasado 2 días consultando al google pero solo insiste en que use una madre llamada UFT-8 o UFT-16 que por la cantidad de bytes y todo pero en ningun lado me ha quedado claro como chingados y donde se define eso !!!!
dice que en el heades de la webpage para que interprete lo chino, pero no tengo problemas para mostrar caracteres chinos en la pagina, sino para mostrar caracteres que aun no logro guardar en la base de datos
y si
quiero morir

algun alma caritativa que quiera orientarme en mi camino a la sabiduria???
  #2 (permalink)  
Antiguo 23/09/2009, 22:29
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Respuesta: China SQL

Recuerda que el collation definido en un campo NVARCHAR sólo define las reglas de ordenamiento y comparación. En un campo VARCHAR, el collation restringe además el conjunto de caracteres representables.
El collation elegido entonces, merece especial consideración, ya que si entre los distintos "sitios del mundo" tuvieras algo diferente al chino (por ejemplo kanjis, caracteres cirílicos o hindis), las reglas de ordenamiento probablemente no sean las mismas.
Finalizando esta larga explicación, tu problema es muy simple:
Defines correctamente los campos como NVARCHAR, lo cual te permitirá almacenar cualquier caracter UNICODE (chinos incluídos), pero al insertar estás metiendo tu texto chino en una cadena VARCHAR, lo cual inserta esos ??????.
Debes recordar siempre que un literal NVARCHAR se forma anteponiendo una N a la cadena.
Código:
VALUES (1,5,N'查找互联网上的商户',1,1,1,N'自治区‎')
Desde tu aplicación ASP.Net, cuando ejecutes tus procedimientos los parametros deben ser de tipo SqlDbType.NVarChar para evitarte problemas.

Saludos.
  #3 (permalink)  
Antiguo 24/09/2009, 04:57
Avatar de Valery-Net  
Fecha de Ingreso: agosto-2008
Mensajes: 694
Antigüedad: 15 años, 8 meses
Puntos: 12
Respuesta: China SQL

Totalmente cierto, cuando uses campos nvarchar debes anteponer "N"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 19:31.