mysql 去除不可见字符_去除sql中不可见字符的n种方法

CREATE TABLE [ASCII0127]

(

Bin          INT,

Dec          INT,

Hex          VARCHAR(128),

Abbr         VARCHAR(128),

Description  NVARCHAR(256),

)

"INSERT INTO (Bin, Dec, Hex, Abbr, Description)

SELECT REPLACE(STR('"&&"',8,0),' ', '0'), '"&&"', REPLACE(STR('"&&"',2,0),' ', '0'), '"&&"', N'"&&"'

UNION ALL"

"SELECT REPLACE(STR('"&&"',8,0),' ', '0'), '"&&"', '"&&"', '"&&"', N'"&&"'

UNION ALL"

INSERT INTO [ASCII0127](Bin, Dec, Hex, Abbr, Description)

SELECT REPLACE(STR('0',8,0),' ', '0'), '0', REPLACE(STR('0',2,0),' ', '0'), 'NUL(null)', N'空字符'

UNION ALL

SELECT REPLACE(STR('1',8,0),' ', '0'), '1', REPLACE(STR('1',2,0),' ', '0'), 'SOH(start of headling)', N'标题开始'

UNION ALL

SELECT REPLACE(STR('10',8,0),' ', '0'), '2', REPLACE(STR('2',2,0),' ', '0'), 'STX (start of text)', N'正文开始'

UNION ALL

SELECT REPLACE(STR('11',8,0),' ', '0'), '3', REPLACE(STR('3',2,0),' ', '0'), 'ETX (end of text)', N'正文结束'

UNION ALL

SELECT REPLACE(STR('100',8,0),' ', '0'), '4', REPLACE(STR('4',2,0),' ', '0'), 'EOT (end of transmission)', N'传输结束'

UNION ALL

SELECT REPLACE(STR('101',8,0),' ', '0'), '5', REPLACE(STR('5',2,0),' ', '0'), 'ENQ (enquiry)', N'请求'

UNION ALL

SELECT REPLACE(STR('110',8,0),' ', '0'), '6', REPLACE(STR('6',2,0),' ', '0'), 'ACK (acknowledge)', N'收到通知'

UNION ALL

SELECT REPLACE(STR('111',8,0),' ', '0'), '7', REPLACE(STR('7',2,0),' ', '0'), 'BEL (bell)', N'响铃'

UNION ALL

SELECT REPLACE(STR('1000',8,0),' ', '0'), '8', REPLACE(STR('8',2,0),' ', '0'), 'BS (backspace)', N'退格'

UNION ALL

SELECT REPLACE(STR('1001',8,0),' ', '0'), '9', REPLACE(STR('9',2,0),' ', '0'), 'HT (horizontal tab)', N'水平制表符'

UNION ALL

SELECT REPLACE(STR('1010',8,0),' ', '0'), '10', '0A', 'LF (NL line feed, new line)', N'换行键'

UNION ALL

SELECT REPLACE(STR('1011',8,0),' ', '0'), '11', '0B', 'VT (vertical tab)', N'垂直制表符'

UNION ALL

SELECT REPLACE(STR('1100',8,0),' ', '0'), '12', '0C', 'FF (NP form feed, new page)', N'换页键'

UNION ALL

SELECT REPLACE(STR('1101',8,0),' ', '0'), '13', '0D', 'CR (carriage return)', N'回车键'

UNION ALL

SELECT REPLACE(STR('1110',8,0),' ', '0'), '14', '0E', 'SO (shift out)', N'不用切换'

UNION ALL

SELECT REPLACE(STR('1111',8,0),' ', '0'), '15', '0F', 'SI (shift in)', N'启用切换'

UNION ALL

SELECT REPLACE(STR('10000',8,0),' ', '0'), '16', '10', 'DLE (data link escape)', N'数据链路转义'

UNION ALL

SELECT REPLACE(STR('10001',8,0),' ', '0'), '17', '11', 'DC1 (device control 1)', N'设备控制'

UNION ALL

SELECT REPLACE(STR('10010',8,0),' ', '0'), '18', '12', 'DC2 (device control 2)', N'设备控制'

UNION ALL

SELECT REPLACE(STR('10011',8,0),' ', '0'), '19', '13', 'DC3 (device control 3)', N'设备控制'

UNION ALL

SELECT REPLACE(STR('10100',8,0),' ', '0'), '20', '14', 'DC4 (device control 4)', N'设备控制'

UNION ALL

SELECT REPLACE(STR('10101',8,0),' ', '0'), '21', '15', 'NAK (negative acknowledge)', N'拒绝接收'

UNION ALL

SELECT REPLACE(STR('10110',8,0),' ', '0'), '22', '16', 'SYN (synchronous idle)', N'同步空闲'

UNION ALL

SELECT REPLACE(STR('10111',8,0),' ', '0'), '23', '17', 'ETB (end of trans. block)', N'传输块结束'

UNION ALL

SELECT REPLACE(STR('11000',8,0),' ', '0'), '24', '18', 'CAN (cancel)', N'取消'

UNION ALL

SELECT REPLACE(STR('11001',8,0),' ', '0'), '25', '19', 'EM (end of medium)', N'介质中断'

UNION ALL

SELECT REPLACE(STR('11010',8,0),' ', '0'), '26', '1A', 'SUB (substitute)', N'替补'

UNION ALL

SELECT REPLACE(STR('11011',8,0),' ', '0'), '27', '1B', 'ESC (escape)', N'溢出'

UNION ALL

SELECT REPLACE(STR('11100',8,0),' ', '0'), '28', '1C', 'FS (file separator)', N'文件分割符'

UNION ALL

SELECT REPLACE(STR('11101',8,0),' ', '0'), '29', '1D', 'GS (group separator)', N'分组符'

UNION ALL

SELECT REPLACE(STR('11110',8,0),' ', '0'), '30', '1E', 'RS (record separator)', N'记录分离符'

UNION ALL

SELECT REPLACE(STR('11111',8,0),' ', '0'), '31', '1F', 'US (unit separator)', N'单元分隔符'

UNION ALL

SELECT REPLACE(STR('100000',8,0),' ', '0'), '32', '20', '(space)', N'空格'

UNION ALL

SELECT REPLACE(STR('100001',8,0),' ', '0'), '33', '21', '!', N''

UNION ALL

SELECT REPLACE(STR('100010',8,0),' ', '0'), '34', '22', '', N''

UNION ALL

SELECT REPLACE(STR('100011',8,0),' ', '0'), '35', '23', '#', N''

UNION ALL

SELECT REPLACE(STR('100100',8,0),' ', '0'), '36', '24', '$', N''

UNION ALL

SELECT REPLACE(STR('100101',8,0),' ', '0'), '37', '25', '%', N''

UNION ALL

SELECT REPLACE(STR('100110',8,0),' ', '0'), '38', '26', '&', N''

UNION ALL

SELECT REPLACE(STR('100111',8,0),' ', '0'), '39', '27', '''', N''

UNION ALL

SELECT REPLACE(STR('101000',8,0),' ', '0'), '40', '28', '(', N''

UNION ALL

SELECT REPLACE(STR('101001',8,0),' ', '0'), '41', '29', ')', N''

UNION ALL

SELECT REPLACE(STR('101010',8,0),' ', '0'), '42', '2A', '*', N''

UNION ALL

SELECT REPLACE(STR('101011',8,0),' ', '0'), '43', '2B', '+', N''

UNION ALL

SELECT REPLACE(STR('101100',8,0),' ', '0'), '44', '2C', ',', N''

UNION ALL

SELECT REPLACE(STR('101101',8,0),' ', '0'), '45', '2D', '-', N''

UNION ALL

SELECT REPLACE(STR('101110',8,0),' ', '0'), '46', '2E', '.', N''

UNION ALL

SELECT REPLACE(STR('101111',8,0),' ', '0'), '47', '2F', '/', N''

UNION ALL

SELECT REPLACE(STR('110000',8,0),' ', '0'), '48', '30', '0', N''

UNION ALL

SELECT REPLACE(STR('110001',8,0),' ', '0'), '49', '31', '1', N''

UNION ALL

SELECT REPLACE(STR('110010',8,0),' ', '0'), '50', '32', '2', N''

UNION ALL

SELECT REPLACE(STR('110011',8,0),' ', '0'), '51', '33', '3', N''

UNION ALL

SELECT REPLACE(STR('110100',8,0),' ', '0'), '52', '34', '4', N''

UNION ALL

SELECT REPLACE(STR('110101',8,0),' ', '0'), '53', '35', '5', N''

UNION ALL

SELECT REPLACE(STR('110110',8,0),' ', '0'), '54', '36', '6', N''

UNION ALL

SELECT REPLACE(STR('110111',8,0),' ', '0'), '55', '37', '7', N''

UNION ALL

SELECT REPLACE(STR('111000',8,0),' ', '0'), '56', '38', '8', N''

UNION ALL

SELECT REPLACE(STR('111001',8,0),' ', '0'), '57', '39', '9', N''

UNION ALL

SELECT REPLACE(STR('111010',8,0),' ', '0'), '58', '3A', ':', N''

UNION ALL

SELECT REPLACE(STR('111011',8,0),' ', '0'), '59', '3B', ';', N''

UNION ALL

SELECT REPLACE(STR('111100',8,0),' ', '0'), '60', '3C', '

UNION ALL

SELECT REPLACE(STR('111101',8,0),' ', '0'), '61', '3D', '=', N''

UNION ALL

SELECT REPLACE(STR('111110',8,0),' ', '0'), '62', '3E', '>', N''

UNION ALL

SELECT REPLACE(STR('111111',8,0),' ', '0'), '63', '3F', '?', N''

UNION ALL

SELECT REPLACE(STR('1000000',8,0),' ', '0'), '64', '40', '@', N''

UNION ALL

SELECT REPLACE(STR('1000001',8,0),' ', '0'), '65', '41', 'A', N''

UNION ALL

SELECT REPLACE(STR('1000010',8,0),' ', '0'), '66', '42', 'B', N''

UNION ALL

SELECT REPLACE(STR('1000011',8,0),' ', '0'), '67', '43', 'C', N''

UNION ALL

SELECT REPLACE(STR('1000100',8,0),' ', '0'), '68', '44', 'D', N''

UNION ALL

SELECT REPLACE(STR('1000101',8,0),' ', '0'), '69', '45', 'E', N''

UNION ALL

SELECT REPLACE(STR('1000110',8,0),' ', '0'), '70', '46', 'F', N''

UNION ALL

SELECT REPLACE(STR('1000111',8,0),' ', '0'), '71', '47', 'G', N''

UNION ALL

SELECT REPLACE(STR('1001000',8,0),' ', '0'), '72', '48', 'H', N''

UNION ALL

SELECT REPLACE(STR('1001001',8,0),' ', '0'), '73', '49', 'I', N''

UNION ALL

SELECT REPLACE(STR('1001010',8,0),' ', '0'), '74', '4A', 'J', N''

UNION ALL

SELECT REPLACE(STR('1001011',8,0),' ', '0'), '75', '4B', 'K', N''

UNION ALL

SELECT REPLACE(STR('1001100',8,0),' ', '0'), '76', '4C', 'L', N''

UNION ALL

SELECT REPLACE(STR('1001101',8,0),' ', '0'), '77', '4D', 'M', N''

UNION ALL

SELECT REPLACE(STR('1001110',8,0),' ', '0'), '78', '4E', 'N', N''

UNION ALL

SELECT REPLACE(STR('1001111',8,0),' ', '0'), '79', '4F', 'O', N''

UNION ALL

SELECT REPLACE(STR('1010000',8,0),' ', '0'), '80', '50', 'P', N''

UNION ALL

SELECT REPLACE(STR('1010001',8,0),' ', '0'), '81', '51', 'Q', N''

UNION ALL

SELECT REPLACE(STR('1010010',8,0),' ', '0'), '82', '52', 'R', N''

UNION ALL

SELECT REPLACE(STR('1010011',8,0),' ', '0'), '83', '53', 'S', N''

UNION ALL

SELECT REPLACE(STR('1010100',8,0),' ', '0'), '84', '54', 'T', N''

UNION ALL

SELECT REPLACE(STR('1010101',8,0),' ', '0'), '85', '55', 'U', N''

UNION ALL

SELECT REPLACE(STR('1010110',8,0),' ', '0'), '86', '56', 'V', N''

UNION ALL

SELECT REPLACE(STR('1010111',8,0),' ', '0'), '87', '57', 'W', N''

UNION ALL

SELECT REPLACE(STR('1011000',8,0),' ', '0'), '88', '58', 'X', N''

UNION ALL

SELECT REPLACE(STR('1011001',8,0),' ', '0'), '89', '59', 'Y', N''

UNION ALL

SELECT REPLACE(STR('1011010',8,0),' ', '0'), '90', '5A', 'Z', N''

UNION ALL

SELECT REPLACE(STR('1011011',8,0),' ', '0'), '91', '5B', '[', N''

UNION ALL

SELECT REPLACE(STR('1011100',8,0),' ', '0'), '92', '5C', '\', N''

UNION ALL

SELECT REPLACE(STR('1011101',8,0),' ', '0'), '93', '5D', ']', N''

UNION ALL

SELECT REPLACE(STR('1011110',8,0),' ', '0'), '94', '5E', '^', N''

UNION ALL

SELECT REPLACE(STR('1011111',8,0),' ', '0'), '95', '5F', '_', N''

UNION ALL

SELECT REPLACE(STR('1100000',8,0),' ', '0'), '96', '60', '`', N''

UNION ALL

SELECT REPLACE(STR('1100001',8,0),' ', '0'), '97', '61', 'a', N''

UNION ALL

SELECT REPLACE(STR('1100010',8,0),' ', '0'), '98', '62', 'b', N''

UNION ALL

SELECT REPLACE(STR('1100011',8,0),' ', '0'), '99', '63', 'c', N''

UNION ALL

SELECT REPLACE(STR('1100100',8,0),' ', '0'), '100', '64', 'd', N''

UNION ALL

SELECT REPLACE(STR('1100101',8,0),' ', '0'), '101', '65', 'e', N''

UNION ALL

SELECT REPLACE(STR('1100110',8,0),' ', '0'), '102', '66', 'f', N''

UNION ALL

SELECT REPLACE(STR('1100111',8,0),' ', '0'), '103', '67', 'g', N''

UNION ALL

SELECT REPLACE(STR('1101000',8,0),' ', '0'), '104', '68', 'h', N''

UNION ALL

SELECT REPLACE(STR('1101001',8,0),' ', '0'), '105', '69', 'i', N''

UNION ALL

SELECT REPLACE(STR('1101010',8,0),' ', '0'), '106', '6A', 'j', N''

UNION ALL

SELECT REPLACE(STR('1101011',8,0),' ', '0'), '107', '6B', 'k', N''

UNION ALL

SELECT REPLACE(STR('1101100',8,0),' ', '0'), '108', '6C', 'l', N''

UNION ALL

SELECT REPLACE(STR('1101101',8,0),' ', '0'), '109', '6D', 'm', N''

UNION ALL

SELECT REPLACE(STR('1101110',8,0),' ', '0'), '110', '6E', 'n', N''

UNION ALL

SELECT REPLACE(STR('1101111',8,0),' ', '0'), '111', '6F', 'o', N''

UNION ALL

SELECT REPLACE(STR('1110000',8,0),' ', '0'), '112', '70', 'p', N''

UNION ALL

SELECT REPLACE(STR('1110001',8,0),' ', '0'), '113', '71', 'q', N''

UNION ALL

SELECT REPLACE(STR('1110010',8,0),' ', '0'), '114', '72', 'r', N''

UNION ALL

SELECT REPLACE(STR('1110011',8,0),' ', '0'), '115', '73', 's', N''

UNION ALL

SELECT REPLACE(STR('1110100',8,0),' ', '0'), '116', '74', 't', N''

UNION ALL

SELECT REPLACE(STR('1110101',8,0),' ', '0'), '117', '75', 'u', N''

UNION ALL

SELECT REPLACE(STR('1110110',8,0),' ', '0'), '118', '76', 'v', N''

UNION ALL

SELECT REPLACE(STR('1110111',8,0),' ', '0'), '119', '77', 'w', N''

UNION ALL

SELECT REPLACE(STR('1111000',8,0),' ', '0'), '120', '78', 'x', N''

UNION ALL

SELECT REPLACE(STR('1111001',8,0),' ', '0'), '121', '79', 'y', N''

UNION ALL

SELECT REPLACE(STR('1111010',8,0),' ', '0'), '122', '7A', 'z', N''

UNION ALL

SELECT REPLACE(STR('1111011',8,0),' ', '0'), '123', '7B', '{', N''

UNION ALL

SELECT REPLACE(STR('1111100',8,0),' ', '0'), '124', '7C', '|', N''

UNION ALL

SELECT REPLACE(STR('1111101',8,0),' ', '0'), '125', '7D', '}', N''

UNION ALL

SELECT REPLACE(STR('1111110',8,0),' ', '0'), '126', '7E', '~', N''

UNION ALL

SELECT REPLACE(STR('1111111',8,0),' ', '0'), '127', '7F', 'DEL (delete)', N'删除'

--/*

--去除特殊字符

--替換非數字,非英文,非漢字的

------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------

ALTER FUNCTION DBO.Invisible_Str

(@S NVARCHAR(MAX))

RETURNS NVARCHAR(MAX)

AS

BEGIN

DECLARE @i INT

SET @i = PATINDEX('%[^-\./_@; ,^0-9,^a-z,^A-Z,^吖-座]%',CONVERT(VARCHAR(MAX),@S))

WHILE @i> 0

Begin

SET @S = STUFF(@S,  @i,  1, '')

SET @i = PATINDEX('%[^-\./_@; ,^0-9,^a-z,^A-Z,^吖-座]%',CONVERT(VARCHAR(MAX),@S))

End

SET @S = RTRIM( LTRIM(@S) )

RETURN @S

END

--去除不可见字符

------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------

--方法:(转后去)

SELECT 'SELECT @Authentication=REPLACE(@Authentication, '''+Hex+';'' ,'''')' FROM ASCII0127 WHERE ([Dec] BETWEEN 0 AND 31) OR [Dec]=127

--方法:(去源)

DECLARE @TableName VARCHAR(MAX)='eEmployee' -->此处填写表名

DECLARE @ColName VARCHAR(MAX)='Badge' -->此处填写字段名

DECLARE @ReplaceCmd VARCHAR(MAX)=@ColName -->此处填写字段名

SELECT  @ReplaceCmd ='REPLACE('+ @ReplaceCmd+', CHAR('+CONVERT(VARCHAR(128),[Dec])+') ,'''')' FROM [ASCII0127] WHERE ([Dec] BETWEEN 0 AND 31) OR [Dec]=127

PRINT @ReplaceCmd

DECLARE @SQqlCmd NVARCHAR(MAX)=''

--SET @SQqlCmd = 'SELECT '+@ReplaceCmd+'AS NeCol FROM '+@TableName

SET @SQqlCmd = 'UPDATE '+@TableName+' SET '+@ColName+'='+@ReplaceCmd

SET @SQqlCmd = 'UPDATE '+@TableName+' SET '+@ColName+'='+RTRIM( LTRIM(@ColName) )

PRINT @SQqlCmd

EXEC (@SQqlCmd)

--方法-a:(推荐)

ALTER FUNCTION dbo.fun_getVisableStr

(@str NVARCHAR(MAX))

RETURNS NVARCHAR(MAX)

AS

BEGIN

declare @word nchar(1),

@VisableStr nvarchar(4000)

set @VisableStr=''

WHILE LEN(@str)>0

BEGIN

IF UNICODE( LEFT(@str,1) ) NOT BETWEEN 0 AND 31 AND UNICODE( LEFT(@str,1) )<>127

SET @VisableStr=@VisableStr + LEFT(@str,1)

SET @str=right(@str,LEN(@str)-1)

END

SET @VisableStr= RTRIM( LTRIM(@VisableStr) )

RETURN @VisableStr

END

--方法-b:SP

CREATE PROCEDURE SP_Invisible_Str ----------SP_Invisible_Str 'eEmployee'

@TblName NVARCHAR(258),

@RetVal INT=0 OUTPUT

AS

BEGIN

--事务(嵌套)控制

Begin Try--开始捕捉

SET XACT_ABORT OFF

BEGIN TRANSACTION -->开始事务

-----------------------------------------------------------------------------------------------------------------------------------------------<

DECLARE @sql NVARCHAR(MAX)

SET @sql = 'SET NOCOUNT ON' +CHAR(13)+ 'SET XACT_ABORT OFF'+CHAR(13)+CHAR(13)+'BEGIN'+CHAR(13)

SELECT @sql =@sql+ '

UPDATE '+@TblName+' SET '+col.name+'='+'dbo.fun_getVisableStr('+col.name+');'

FROM syscolumns AS col INNER JOIN sysobjects  AS obj  ON col.ID = obj.ID INNER JOIN systypes  AS typ ON col.xtype = typ.xtype

WHERE obj.xtype ='U'

AND obj.name = @TblName

AND typ.name IN ('VARCHAR','CHAR','NVARCHAR','NCHAR')

SELECT @sql =@sql+

'

END

SET NOCOUNT OFF

SET XACT_ABORT ON'

--PRINT(@sql)

--SELECT @sql

EXEC SP_EXECUTESQL @sql

-----------------------------------------------------------------------------------------------------------------------------------------------<

COMMIT TRANSACTION -->提交事务

SET XACT_ABORT ON

End Try

Begin Catch

Select Error_number() as ErrorNumber,  --错误代码

Error_severity() as ErrorSeverity,  --错误严重级别,级别小于try catch 捕获不到

Error_state() as ErrorState ,  --错误状态码

Error_Procedure() as ErrorProcedure , --出现错误的存储过程或触发器的名称。

Error_line() as ErrorLine,  --发生错误的行号

Error_message() as ErrorMessage  --错误的具体信息

IF(@@trancount>1) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务

COMMIT TRANSACTION -->回滚事务

ELSE

ROLLBACK TRANSACTION

DECLARE @ErrorMessage NVARCHAR(4000)=ERROR_MESSAGE(),

@ErrorSeverity INT= ERROR_SEVERITY(),

@ErrorState INT=ERROR_STATE()

-------------------------------------

--/*

IF @ErrorMessage IN (SELECT Title FROM skyMSGAlarm)

BEGIN

SET @RetVal=(SELECT MAX(ID) FROM skyMSGAlarm WHERE Title=@ErrorMessage)

END

ELSE

BEGIN

DECLARE @MAX_ID INT

SET @MAX_ID=(SELECT MAX(ID)+1 FROM skyMSGAlarm WHERE ID LIKE '93%') --<

WHILE @MAX_ID IN (SELECT MAX(ID) FROM skyMSGAlarm)

BEGIN

SET @MAX_ID = @MAX_ID+1

END

SET @RetVal=@MAX_ID

INSERT INTO skyMSGAlarm(ID, Title)

SELECT @RetVal, @ErrorMessage

END

RETURN @RetVal

--*/

-------------------------------------

RAISERROR (@ErrorMessage,  -- Message text.

@ErrorSeverity, -- Severity.

@ErrorState     -- State.

)

End Catch--结束捕捉

END

/*

ALTER FUNCTION dbo.fun_getVisableStr

(@str NVARCHAR(MAX))

RETURNS NVARCHAR(MAX)

AS

BEGIN

declare @word nchar(1),

@VisableStr nvarchar(4000)

set @VisableStr=''

WHILE LEN(@str)>0

BEGIN

IF UNICODE( LEFT(@str,1) ) NOT BETWEEN 0 AND 31 AND UNICODE( LEFT(@str,1) )<>127

SET @VisableStr=@VisableStr + LEFT(@str,1)

SET @str=right(@str,LEN(@str)-1)

END

SET @VisableStr= RTRIM( LTRIM(@VisableStr) )

RETURN @VisableStr

END

*--/

--*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值