2011-08-12 76 views

Respuesta

32

Probablemente sólo hay que ver los ASCII y EXTENDED ASCII conjuntos de caracteres. Por lo que sé, cualquiera de estos están permitidos en un campo char/varchar.

Si usa nchar/nvarchar, es prácticamente cualquier carácter en cualquier conjunto Unicode del mundo.

enter image description here

enter image description here

+0

¿qué tipo de datos se recomienda guardar la información correcta de copia? por ej. "© 2014 mi empresa" – Hitesh

+0

Al comentar sobre un hilo demasiado viejo, pero no soy capaz de almacenar estos datos - "Banarescu" en un campo nvarchar/varchar/texto. ¿Alguna idea? – Nitesh

+0

@Nitesh necesita más información. ¿Qué error está recibiendo? – JNK

13

EDITAR basado en los comentarios:

Si tiene saltos de línea en el conjunto de resultados y desea eliminarlos, hacer su consulta de esta manera:

SELECT 
    REPLACE(REPLACE(YourColumn1,CHAR(13),' '),CHAR(10),' ') 
    ,REPLACE(REPLACE(YourColumn2,CHAR(13),' '),CHAR(10),' ') 
    ,REPLACE(REPLACE(YourColumn3,CHAR(13),' '),CHAR(10),' ') 
    --^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    --only add the above code to strings that are having line breaks, not to numbers or dates 
    FROM YourTable... 
    WHERE ... 

Esto reemplazará todos los saltos de línea con un espacio charact er.

Ejecutar este a "obtener" todos los caracteres permitidos en un char() y varchar():

;WITH AllNumbers AS 
(
    SELECT 1 AS Number 
    UNION ALL 
    SELECT Number+1 
     FROM AllNumbers 
     WHERE Number+1<256 
) 
SELECT Number AS ASCII_Value,CHAR(Number) AS ASCII_Char FROM AllNumbers 
OPTION (MAXRECURSION 256) 

SALIDA:

ASCII_Value ASCII_Char 
----------- ---------- 
1   
2   
3   
4   
5   
6   
7   
8   
9    
10   

11   
12   
13   

14   
15   
16   
17   
18   
19   
20   
21   
22   
23   
24   
25   
26   
27   
28   
29   
30   
31   
32   
33   ! 
34   " 
35   # 
36   $ 
37   % 
38   & 
39   ' 
40   (
41   ) 
42   * 
43   + 
44   , 
45   - 
46   . 
47  /
48   0 
49   1 
50   2 
51   3 
52   4 
53   5 
54   6 
55   7 
56   8 
57   9 
58   : 
59   ; 
60   < 
61   = 
62   > 
63   ? 
64   @ 
65   A 
66   B 
67   C 
68   D 
69   E 
70   F 
71   G 
72   H 
73   I 
74   J 
75   K 
76   L 
77   M 
78   N 
79   O 
80   P 
81   Q 
82   R 
83   S 
84   T 
85   U 
86   V 
87   W 
88   X 
89   Y 
90   Z 
91   [ 
92   \ 
93   ] 
94  ^
95   _ 
96   ` 
97   a 
98   b 
99   c 
100   d 
101   e 
102   f 
103   g 
104   h 
105   i 
106   j 
107   k 
108   l 
109   m 
110   n 
111   o 
112   p 
113   q 
114   r 
115   s 
116   t 
117   u 
118   v 
119   w 
120   x 
121   y 
122   z 
123   { 
124   | 
125   } 
126   ~ 
127   
128   € 
129   
130   ‚ 
131   ƒ 
132   „ 
133   … 
134   † 
135   ‡ 
136   ˆ 
137   ‰ 
138   Š 
139   ‹ 
140   Π
141   
142   Ž 
143   
144   
145   ‘ 
146   ’ 
147   “ 
148   ” 
149   • 
150   – 
151   — 
152   ˜ 
153   ™ 
154   š 
155   › 
156   œ 
157   
158   ž 
159   Ÿ 
160     
161   ¡ 
162   ¢ 
163   £ 
164   ¤ 
165   ¥ 
166   ¦ 
167   § 
168   ¨ 
169   © 
170   ª 
171   « 
172   ¬ 
173   ­ 
174   ® 
175   ¯ 
176   ° 
177   ± 
178   ² 
179   ³ 
180   ´ 
181   µ 
182   ¶ 
183   · 
184   ¸ 
185   ¹ 
186   º 
187   » 
188   ¼ 
189   ½ 
190   ¾ 
191   ¿ 
192   À 
193   Á 
194   Â 
195   Ã 
196   Ä 
197   Å 
198   Æ 
199   Ç 
200   È 
201   É 
202   Ê 
203   Ë 
204   Ì 
205   Í 
206   Î 
207   Ï 
208   Ð 
209   Ñ 
210   Ò 
211   Ó 
212   Ô 
213   Õ 
214   Ö 
215   × 
216   Ø 
217   Ù 
218   Ú 
219   Û 
220   Ü 
221   Ý 
222   Þ 
223   ß 
224   à 
225   á 
226   â 
227   ã 
228   ä 
229   å 
230   æ 
231   ç 
232   è 
233   é 
234   ê 
235   ë 
236   ì 
237   í 
238   î 
239   ï 
240   ð 
241   ñ 
242   ò 
243   ó 
244   ô 
245   õ 
246   ö 
247   ÷ 
248   ø 
249   ù 
250   ú 
251   û 
252   ü 
253   ý 
254   þ 
255   ÿ 

(255 row(s) affected) 
+0

¡Un pequeño CTE +1 genial! – ConstantineK

1

creo que los caracteres especiales son # y @ solamente. .. query mostrará una lista de ambos.

DECLARE @str VARCHAR(50) 
SET @str = '[azAB09ram#[email protected]' + CHAR(5) + 'a~b$' 
SELECT DISTINCT poschar 
FROM MASTER..spt_values S 
     CROSS APPLY (SELECT SUBSTRING(@str,NUMBER,1) AS poschar) t 
WHERE NUMBER > 0 
     AND NUMBER <= LEN(@str) 
     AND NOT (ASCII(t.poschar) BETWEEN 65 AND 90 
       OR ASCII(t.poschar) BETWEEN 97 AND 122 
       OR ASCII(t.poschar) BETWEEN 48 AND 57) 
2

Los caracteres específicos que se pueden almacenar en una columna varchar o char dependen de la intercalación de columna. Consulte my answer here para obtener una secuencia de comandos que le mostrará estos para las diferentes colaciones diferentes.

Si usted quiere encontrar todos los caracteres ASCII fuera de un rango determinado see my answer here.

Cuestiones relacionadas