A fuel injection system for an internal combustion engine comprising: a fuel injector working to spray fuel into an internal combustion engine; and an injection controller working to execute an injection instruction function when a given learning condition is encountered, the injection instruction function being to instruct said fuel injector to perform learning injection events in sequence to inject fuel into the internal combustion engine for injection durations different from each other, said injection controller also executing an actual injection quantity determining function and a correction function, the actual injection quantity determining function being to monitor a change in operating condition of the internal combustion engine which arises from injection of fuel into the internal combustion engine to learn an actual injection quantity that is a quantity of the fuel calculated based on an output torque T as having been sprayed from said fuel injector in each of the learning injection events, the correction function being to determine an injection characteristic of the fuel injector based on the actual injection quantities, as determined by said actual injection quantity determining function, the correction function also working to determine a correction value based on the injection characteristic of said fuel injector which is required to correct an injection duration for which said fuel injector is to be opened to spray a target quantity (Qo) of the fuel so as to bring a quantity of the fuel actually sprayed from said fuel injector close to the target quantity (Qo), characterized in that the injection instruction function determines ones of the injection durations for use in second and subsequent ones of the learning injection events so as to bring the actual injection quantities in the second and subsequent ones of the learning injection events to be smaller and greater alternately than the actual injection quantity by a given amount in a first one of the learning injection events. a fuel injector working to spray fuel into an internal combustion engine; and an injection controller working to execute an injection instruction function when a given learning condition is encountered, the injection instruction function being to instruct said fuel injector to perform learning injection events in sequence to inject fuel into the internal combustion engine for injection durations different from each other, said injection controller also executing an actual injection quantity determining function and a correction function, the actual injection quantity determining function being to monitor a change in operating condition of the internal combustion engine which arises from injection of fuel into the internal combustion engine to learn an actual injection quantity that is a quantity of the fuel calculated based on an output torque T as having been sprayed from said fuel injector in each of the learning injection events, the correction function being to determine an injection characteristic of the fuel injector based on the actual injection quantities, as determined by said actual injection quantity determining function, the correction function also working to determine a correction value based on the injection characteristic of said fuel injector which is required to correct an injection duration for which said fuel injector is to be opened to spray a target quantity (Qo) of the fuel so as to bring a quantity of the fuel actually sprayed from said fuel injector close to the target quantity (Qo), characterized in that the injection instruction function determines ones of the injection durations for use in second and subsequent ones of the learning injection events so as to bring the actual injection quantities in the second and subsequent ones of the learning injection events to be smaller and greater alternately than the actual injection quantity by a given amount in a first one of the learning injection events.